/ Hex Artifact Content
Login

Artifact 7718d72427fd3abae6603a7a225e3eec12137d4a:


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 69 66 28 20 64 62 2d 3e 6d  em;..  if( db->m
af00: 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54  Trace & SQLITE_T
af10: 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  RACE_ROW ){.    
af20: 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54  db->xTrace(SQLIT
af30: 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d  E_TRACE_ROW, db-
af40: 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30  >pTraceArg, p, 0
af50: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74  );.  }..  /* Ret
af60: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
af70: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69   */.  p->pc = (i
af80: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b  nt)(pOp - aOp) +
af90: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
afa0: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
afb0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
afc0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
afd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
afe0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
aff0: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
b000: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
b010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
b020: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
b030: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
b040: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
b050: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b060: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b070: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
b080: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
b090: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
b0a0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
b0b0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
b0c0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
b0d0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
b0e0: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
b0f0: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
b100: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
b110: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
b120: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
b130: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b140: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
b150: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
b160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
b170: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
b180: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
b190: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
b1a0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
b1b0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
b1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b1d0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b1e0: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
b1f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
b200: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
b210: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
b220: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b230: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b240: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b250: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b260: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b270: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
b280: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
b290: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
b2a0: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
b2b0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
b2c0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
b2d0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
b2e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
b2f0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
b300: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
b310: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
b320: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
b330: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
b340: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
b350: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
b360: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
b370: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
b380: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
b390: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
b3a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b3b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
b3c0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
b3d0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
b3e0: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
b3f0: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
b400: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
b410: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
b420: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
b430: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
b440: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
b450: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
b460: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
b470: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
b480: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
b490: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
b4a0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
b4b0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b4c0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b4d0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
b4e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b4f0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b500: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b510: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b520: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b530: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b540: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b550: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b560: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b570: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b580: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b590: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b5a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b5b0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b5c0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b5d0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
b5e0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
b5f0: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
b600: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b610: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b620: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b630: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b640: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b650: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b660: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b670: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b680: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b690: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b6a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b6b0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b6c0: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
b6d0: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
b6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b6f0: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
b700: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b710: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b720: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b730: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b740: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b750: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b760: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b770: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
b780: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b790: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b7a0: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
b7b0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
b7c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
b7d0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b7e0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b7f0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b800: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b810: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
b820: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
b830: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
b840: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
b850: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
b860: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b870: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
b880: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b890: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
b8a0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
b8b0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b8c0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
b8d0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b8e0: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b8f0: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b900: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b910: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b920: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b930: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b940: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b950: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b960: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b970: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b980: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b990: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b9a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b9b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b9c0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b9e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b9f0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
ba00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
ba10: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
ba20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ba30: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
ba40: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ba50: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
ba60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba70: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
ba80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ba90: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bab0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
bac0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
bad0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
bae0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
baf0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bb00: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
bb10: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
bb20: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
bb30: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
bb40: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
bb50: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
bb60: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
bb70: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
bb80: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
bb90: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
bba0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
bbb0: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
bbc0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
bbd0: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
bbe0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
bbf0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bc00: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
bc10: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bc20: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bc30: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
bc40: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bc50: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
bc60: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bc70: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
bc80: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
bc90: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bca0: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
bcb0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bcc0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bcd0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
bce0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
bcf0: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
bd00: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
bd10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bd20: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
bd30: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
bd40: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bd50: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
bd60: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
bd70: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
bd80: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
bd90: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
bda0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bdb0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
bdc0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
bdd0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
bde0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
bdf0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
be00: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
be10: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
be20: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
be30: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
be40: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
be50: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
be60: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
be70: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
be80: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
be90: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
bea0: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
beb0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
bec0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bed0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
bee0: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
bef0: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
bf00: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
bf10: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
bf20: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
bf30: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
bf40: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
bf50: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bf60: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
bf70: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
bf80: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
bf90: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
bfa0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
bfb0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
bfc0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
bfd0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
bfe0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bff0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c000: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c010: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c020: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c030: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
c040: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c050: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
c060: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
c070: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c080: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c090: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c0a0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
c0b0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
c0c0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
c0d0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
c0e0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c0f0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c100: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c110: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c120: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c130: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c140: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c150: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c160: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c170: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c180: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c190: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c1a0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c1b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c1c0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c1d0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c1e0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c1f0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c200: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c210: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c220: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c230: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c240: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c250: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c270: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c280: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c290: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c2a0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c2b0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c2c0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c2d0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c2e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c2f0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c300: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c310: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c320: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c330: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c340: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c350: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c360: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c370: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c380: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c390: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c3a0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c3b0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c3c0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c3d0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c3e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c3f0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c400: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c410: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c420: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c430: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c440: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c460: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c470: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c480: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c490: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c4a0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c4b0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c4c0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c4d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c4e0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c4f0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c500: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c510: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
c520: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c530: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c540: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c550: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c560: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c570: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c580: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c590: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c5a0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c5b0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c5c0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c5d0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c5e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c5f0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c600: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c610: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c620: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c630: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c640: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c650: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c660: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c670: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c680: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c690: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c6a0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c6b0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c6c0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c6d0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c6e0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c6f0: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c700: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c710: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c720: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c730: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c740: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c750: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c760: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c770: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c780: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c790: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c7a0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c7b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c7c0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c7d0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c7e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c7f0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c800: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c810: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c820: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c830: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c840: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c850: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c860: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c870: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c880: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c890: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c8a0: 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  Def object that.
c8b0: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
c8c0: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
c8d0: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c8e0: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c8f0: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
c900: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c910: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c920: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
c930: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
c940: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c950: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c960: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c970: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c980: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c990: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c9a0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c9b0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c9c0: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c9d0: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c9e0: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c9f0: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
ca00: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
ca10: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
ca20: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
ca30: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
ca40: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ca50: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
ca60: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
ca70: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
ca80: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
ca90: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
caa0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
cab0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
cac0: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
cad0: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
cae0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
caf0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
cb00: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63  * See also: Func
cb10: 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41  tion, AggStep, A
cb20: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70  ggFinal.*/./* Op
cb30: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
cb40: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cb50: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
cb60: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
cb70: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
cb80: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
cb90: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
cba0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
cbb0: 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  ext object that.
cbc0: 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  ** contains a po
cbd0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e  inter to the fun
cbe0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29  ction to be run)
cbf0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
cc00: 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d  ts taken.** from
cc10: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
cc20: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
cc30: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
cc40: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
cc50: 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ed.** in registe
cc60: 72 20 50 33 2e 20 20 52 65 67 69 73 74 65 72 20  r P3.  Register 
cc70: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
cc80: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
cc90: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
cca0: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
ccb0: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
ccc0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
ccd0: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
cce0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
ccf0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
cd00: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
cd10: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
cd20: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
cd30: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
cd40: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
cd50: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
cd60: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
cd70: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
cd80: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
cd90: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cda0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
cdb0: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
cdc0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
cdd0: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
cde0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
cdf0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
ce00: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
ce10: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
ce20: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66  ode..**.** SQL f
ce30: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69  unctions are ini
ce40: 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
ce50: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74  OP_Function0 wit
ce60: 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  h P4 pointing.**
ce70: 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62   to a FuncDef ob
ce80: 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69  ject.  But on fi
ce90: 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20  rst evaluation, 
cea0: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69  the P4 operand i
ceb0: 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  s.** automatical
cec0: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  ly converted int
ced0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
cee0: 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  text object and 
cef0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a  the operation.**
cf00: 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73   changed to this
cf10: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
cf20: 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ode.  In this wa
cf30: 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
cf40: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
cf50: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf60: 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e  object occurs on
cf70: 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20  ly once, rather 
cf80: 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61  than once for ea
cf90: 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e  ch.** evaluation
cfa0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
cfb0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
cfc0: 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67  : Function0, Agg
cfd0: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
cfe0: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
cff0: 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  on0: {.  int n;.
d000: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d010: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d020: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d030: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
d040: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
d050: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
d060: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
d070: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
d080: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
d090: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
d0a0: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
d0b0: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
d0c0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
d0d0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
d0e0: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
d0f0: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
d100: 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
d110: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
d120: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
d130: 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
d140: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
d150: 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
d160: 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
d170: 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  mem;.  pCtx->pOu
d180: 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  t = 0;.  pCtx->p
d190: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
d1a0: 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
d1b0: 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
d1c0: 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
d1d0: 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
d1e0: 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
d1f0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
d200: 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
d210: 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
d220: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
d230: 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20  _Function;.  /* 
d240: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
d250: 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f  o OP_Function */
d260: 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  .}.case OP_Funct
d270: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
d280: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d290: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d2a0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d2b0: 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
d2c0: 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
d2d0: 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  pCtx;..  /* If t
d2e0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
d2f0: 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
d300: 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
d310: 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
d320: 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
d330: 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
d340: 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
d350: 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
d360: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
d370: 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
d380: 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
d390: 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
d3a0: 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
d3b0: 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
d3c0: 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
d3d0: 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
d3e0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
d3f0: 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ect */.  pOut = 
d400: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d410: 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74    if( pCtx->pOut
d420: 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20   != pOut ){.    
d430: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75  pCtx->pOut = pOu
d440: 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  t;.    for(i=pCt
d450: 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
d460: 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
d470: 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
d480: 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d  >p2+i];.  }..  m
d490: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d4a0: 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  p, pCtx->pOut);.
d4b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
d4c0: 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
d4d0: 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
d4e0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
d4f0: 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
d500: 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
d510: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d520: 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
d530: 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
d540: 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54 79 70  ndif.  MemSetTyp
d550: 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f 75 74  eFlag(pCtx->pOut
d560: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
d570: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d580: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74   = 0;.  db->last
d590: 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
d5a0: 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75  d;.  (*pCtx->pFu
d5b0: 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
d5c0: 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43  , pCtx->argc, pC
d5d0: 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50  tx->argv);/* IMP
d5e0: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
d5f0: 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  */.  lastRowid =
d600: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
d610: 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72 6f 77   /* Remember row
d620: 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  id changes made 
d630: 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20  by xSFunc */..  
d640: 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69  /* If the functi
d650: 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65  on returned an e
d660: 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65  rror, throw an e
d670: 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66  xception */.  if
d680: 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72  ( pCtx->fErrorOr
d690: 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70  Aux ){.    if( p
d6a0: 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a  Ctx->isError ){.
d6b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d6c0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
d6d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
d6e0: 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b  xt(pCtx->pOut));
d6f0: 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78  .      rc = pCtx
d700: 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  ->isError;.    }
d710: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d720: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 64 62  DeleteAuxData(db
d730: 2c 20 26 70 2d 3e 70 41 75 78 44 61 74 61 2c 20  , &p->pAuxData, 
d740: 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e  pCtx->iOp, pOp->
d750: 70 31 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  p1);.    if( rc 
d760: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
d770: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
d780: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
d790: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
d7a0: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
d7b0: 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28 20 70  er P3 */.  if( p
d7c0: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Out->flags & (ME
d7d0: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20  M_Str|MEM_Blob) 
d7e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d7f0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
d800: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63  (pCtx->pOut, enc
d810: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
d820: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
d830: 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75 74 29  oBig(pCtx->pOut)
d840: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
d850: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
d860: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
d870: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55  pCtx->pOut);.  U
d880: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d890: 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ZE(pCtx->pOut);.
d8a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d8b0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
d8c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d8d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d8e0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
d8f0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d900: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
d910: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d920: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
d930: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
d940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
d950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
d960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
d970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
d980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
d990: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
d9a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d9b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
d9c0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d9d0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
d9e0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
d9f0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
da00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
da10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
da20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
da30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
da40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
da50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
da60: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
da70: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
da80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
da90: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
daa0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
dab0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
dac0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
dad0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
dae0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
daf0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
db00: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
db10: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
db20: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
db30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
db40: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
db50: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
db60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
db70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
db80: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
db90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
dba0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
dbb0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
dbc0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
dbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dbe0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
dbf0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
dc00: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
dc10: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
dc20: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
dc30: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
dc40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
dc50: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
dc60: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
dc70: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
dc80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
dc90: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
dca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dcb0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
dcc0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dcd0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dd00: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
dd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dd20: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
dd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dd40: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
dd50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
dd60: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
dd70: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
dd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
dd90: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
dda0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
ddb0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
ddc0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
ddd0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
dde0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
ddf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
de00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
de10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
de20: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
de30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
de40: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
de50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
de60: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
de70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
de80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
de90: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
dea0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
deb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
dec0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
ded0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
dee0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
def0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
df00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
df10: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
df20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
df30: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
df40: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
df50: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
df60: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
df70: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
df80: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
df90: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
dfa0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
dfb0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
dfc0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
dfd0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
dfe0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
dff0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
e000: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
e010: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
e020: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
e030: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
e040: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
e050: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
e060: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
e070: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
e080: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
e090: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
e0a0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
e0b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
e0c0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
e0d0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
e0e0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
e0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
e100: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
e110: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
e120: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
e130: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
e140: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
e150: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
e160: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
e170: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
e180: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
e190: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
e1a0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
e1b0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
e1c0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
e1d0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
e1e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
e1f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e200: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
e210: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
e220: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
e230: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
e240: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
e250: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
e260: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e270: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
e280: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
e290: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
e2a0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
e2b0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
e2c0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
e2d0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
e2e0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
e2f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
e300: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e310: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
e320: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
e330: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
e340: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
e350: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
e360: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
e370: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e380: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
e390: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
e3a0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
e3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e3c0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
e3d0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
e3e0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
e3f0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
e400: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
e410: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
e420: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
e430: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
e440: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
e450: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
e460: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
e470: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
e480: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
e490: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
e4a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e4b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e4c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e4d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
e4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e4f0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
e500: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
e510: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
e520: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
e530: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
e540: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
e550: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
e560: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
e570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e580: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
e590: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
e5a0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
e5b0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
e5c0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
e5d0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
e5e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e5f0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
e600: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
e610: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
e620: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
e630: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
e640: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
e650: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e660: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
e670: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
e680: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e690: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
e6a0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
e6b0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
e6c0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e6d0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e6e0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e6f0: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e700: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e710: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e720: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e730: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e740: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e750: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e760: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e770: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e780: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e790: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e7a0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
e7b0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
e7c0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
e7d0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
e7e0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e7f0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e800: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e810: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e820: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
e830: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
e840: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
e850: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
e860: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e870: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
e880: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
e890: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
e8a0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
e8b0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
e8c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e8d0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
e8e0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
e8f0: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
e900: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
e910: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
e920: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
e930: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
e940: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
e950: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
e960: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
e970: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
e980: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e990: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e9a0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e9b0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e9c0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e9d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
e9e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e9f0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
ea00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
ea10: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
ea20: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
ea30: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
ea40: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
ea50: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
ea60: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
ea70: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ea80: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
ea90: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
eaa0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
eab0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
eac0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
ead0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
eae0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
eaf0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
eb00: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
eb10: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
eb20: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
eb30: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
eb40: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
eb50: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
eb60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
eb70: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
eb80: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
eb90: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
eba0: 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72  E(pIn1);.  if( r
ebb0: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
ebc0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
ebd0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
ebe0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
ebf0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
ec00: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
ec10: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ec20: 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20   if r[P1]<r[P3] 
ec30: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  goto P2.**.** Co
ec40: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
ec50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec60: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
ec70: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
ec80: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
ec90: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
eca0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
ecb0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
ecc0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
ecd0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
ece0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
ecf0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
ed00: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
ed10: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ed20: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
ed30: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
ed40: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
ed50: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
ed60: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
ed70: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
ed80: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
ed90: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
eda0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
edb0: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
edc0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
edd0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
ede0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
edf0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ee00: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ee10: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
ee20: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ee30: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
ee40: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
ee50: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
ee60: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
ee70: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
ee80: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
ee90: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
eea0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
eeb0: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
eec0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
eed0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
eee0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
eef0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
ef00: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
ef10: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
ef20: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
ef30: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
ef40: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
ef50: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
ef60: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
ef70: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
ef80: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
ef90: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
efa0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
efb0: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
efc0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
efd0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
efe0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
eff0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
f000: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
f010: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
f020: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
f030: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
f040: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
f050: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
f060: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
f070: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
f080: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
f090: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
f0a0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
f0b0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
f0c0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
f0d0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
f0e0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
f0f0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
f100: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
f110: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
f120: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
f130: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
f140: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
f150: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
f160: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
f170: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
f180: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
f190: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
f1a0: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
f1b0: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
f1c0: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
f1d0: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
f1e0: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
f1f0: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
f200: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
f210: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
f220: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
f230: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
f240: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
f250: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
f260: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
f270: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
f280: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
f290: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
f2a0: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
f2b0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
f2c0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f2d0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f2e0: 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]!=r[P3] goto P2
f2f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f300: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f310: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f320: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f330: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f340: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
f350: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
f360: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
f370: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f380: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
f390: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f3a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
f3b0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f3c0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
f3d0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f3e0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
f3f0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
f400: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
f410: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
f420: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f430: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f440: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
f450: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
f460: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
f470: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
f480: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
f490: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
f4a0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f4b0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
f4c0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
f4d0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
f4e0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
f4f0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
f500: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
f510: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
f520: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f530: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f540: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
f550: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f560: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f570: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f580: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f590: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f5a0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
f5b0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f5c0: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
f5d0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f5e0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f5f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
f600: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
f610: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
f620: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f630: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f640: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
f650: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
f660: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
f670: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
f680: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
f690: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
f6a0: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
f6b0: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
f6c0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f6d0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f6e0: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
f6f0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
f700: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
f710: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
f720: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
f730: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
f740: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
f750: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
f760: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
f770: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
f780: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f790: 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33  : if r[P1]<=r[P3
f7a0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f7b0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f7c0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f7d0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f7e0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f7f0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f800: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f810: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
f820: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
f830: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
f840: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
f850: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
f860: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f870: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
f880: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
f890: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f8a0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72  psis: if r[P1]>r
f8b0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f8c0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f8d0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f8e0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f8f0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f900: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f910: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f920: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
f930: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
f940: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f950: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f960: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f970: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f980: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
f990: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
f9a0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f9b0: 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20  if r[P1]>=r[P3] 
f9c0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
f9d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f9e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
f9f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fa00: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fa10: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fa20: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fa30: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
fa40: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
fa50: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
fa60: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
fa70: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
fa80: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
fa90: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
faa0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
fab0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fac0: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
fad0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fae0: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
faf0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fb00: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
fb10: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
fb20: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
fb30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fb40: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
fb50: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
fb60: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
fb70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
fb80: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
fb90: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fbb0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
fbc0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
fbd0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fbf0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
fc00: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
fc10: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
fc20: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
fc30: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
fc40: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
fc50: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
fc60: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
fc70: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
fc80: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
fc90: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
fca0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
fcb0: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
fcc0: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
fcd0: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
fce0: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
fcf0: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
fd00: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
fd10: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
fd20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fd30: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
fd40: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
fd50: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
fd60: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
fd70: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
fd80: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
fd90: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
fda0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
fdb0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
fdc0: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
fdd0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fde0: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
fdf0: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
fe00: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
fe10: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
fe20: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
fe30: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
fe40: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
fe50: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
fe60: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
fe70: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
fe80: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
fe90: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
fea0: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
feb0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
fec0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
fed0: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
fee0: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
fef0: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
ff00: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
ff10: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
ff20: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
ff30: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
ff40: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
ff50: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c  (flags1&MEM_Null
ff60: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
ff70: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
ff80: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
ff90: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
ffa0: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
ffb0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
ffc0: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
ffd0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
ffe0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
fff0: 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 1;  /* Resul
10000 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ts are not equal
10010 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
10020 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
10030 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
10040 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
10050 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
10060 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
10070 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
10080 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
10090 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
100a0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
100b0 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
100c0 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
100d0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
100e0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
100f0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10100 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
10110 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10120 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
10130 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
10140 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  );.        MemSe
10150 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
10160 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
10170 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10180 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
10190 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
101a0 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
101b0 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
101c0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
101d0 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
101e0 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
101f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10200 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
10210 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
10220 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
10230 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
10240 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
10250 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
10260 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
10270 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
10280 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
10290 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
102a0 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
102b0 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66  ERIC ){.      if
102c0 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67  ( (flags1 | flag
102d0 73 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  s3)&MEM_Str ){. 
102e0 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
102f0 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10300 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
10310 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
10320 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
10330 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
10340 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 66  ,0);.          f
10350 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
10360 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ags;.        }. 
10370 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10380 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10390 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
103a0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
103b0 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
103c0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
103d0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ,0);.        }. 
103e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
103f0 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
10400 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
10410 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  {.      if( (fla
10420 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs1 & MEM_Str)==
10430 30 20 26 26 20 28 66 6c 61 67 73 31 20 26 20 28  0 && (flags1 & (
10440 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10450 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10460 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10470 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10480 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10490 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
104a0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
104b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
104c0 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
104d0 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn1, encoding, 
104e0 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
104f0 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45  case( (flags1&ME
10500 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d  M_Dyn) != (pIn1-
10510 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
10520 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10530 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  1 = (pIn1->flags
10540 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
10550 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45  ) | (flags1 & ME
10560 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
10570 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49       flags3 = pI
10580 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20  n3->flags;.     
10590 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c   }.      if( (fl
105a0 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags3 & MEM_Str)=
105b0 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20 26 20  =0 && (flags3 & 
105c0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
105d0 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
105e0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
105f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10600 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
10610 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
10620 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
10630 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10640 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
10650 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn3, encoding,
10660 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
10670 74 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d  tcase( (flags3&M
10680 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33  EM_Dyn) != (pIn3
10690 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
106a0 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
106b0 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  s3 = (pIn3->flag
106c0 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
106d0 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d  k) | (flags3 & M
106e0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
106f0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
10710 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
10720 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
10730 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 66  ==0 );.    if( f
10740 6c 61 67 73 31 20 26 20 4d 45 4d 5f 5a 65 72 6f  lags1 & MEM_Zero
10750 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10760 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
10770 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
10780 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
10790 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
107a0 66 28 20 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  f( flags3 & MEM_
107b0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
107c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
107d0 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
107e0 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d      flags3 &= ~M
107f0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
10800 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
10810 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
10820 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
10830 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
10840 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
10850 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10860 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
10870 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
10880 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
10890 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
108a0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
108b0 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
108c0 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
108d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
108e0 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
108f0 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
10900 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
10910 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
10920 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
10930 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
10940 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
10950 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
10960 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10970 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10980 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10990 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
109a0 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
109b0 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
109c0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
109d0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
109e0 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
109f0 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
10a00 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
10a10 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
10a20 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
10a30 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
10a40 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
10a50 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10a60 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10a70 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10a80 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10a90 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
10aa0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10ab0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10ac0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
10ad0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10ae0 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
10af0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10b00 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
10b10 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
10b20 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
10b30 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
10b40 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
10b50 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
10b60 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10b70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
10b80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10b90 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
10ba0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
10bb0 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
10bc0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
10bd0 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
10be0 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
10bf0 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
10c00 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
10c10 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
10c20 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
10c30 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
10c40 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
10c50 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
10c60 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
10c70 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
10c80 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
10c90 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
10ca0 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
10cb0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
10cc0 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20  _Compare..**.** 
10cd0 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65  The first intege
10ce0 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65  r in the P4 inte
10cf0 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68 65  ger array is the
10d00 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61   length of the a
10d10 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73  rray.** and does
10d20 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74   not become part
10d30 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61 74   of the permutat
10d40 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
10d50 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
10d60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10d70 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
10d80 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
10d90 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
10da0 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
10db0 34 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72 65 61  4.ai + 1;.  brea
10dc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10dd0 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50   Compare P1 P2 P
10de0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
10df0 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d  sis: r[P1@P3] <-
10e00 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  > r[P2@P3].**.**
10e10 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63   Compare two vec
10e20 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
10e30 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
10e40 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c  g(P1+P3-1) (call
10e50 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20   this.** vector 
10e60 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
10e70 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
10e80 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
10e90 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
10ea0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
10eb0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
10ec0 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
10ed0 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  uct..**.** If P5
10ee0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
10ef0 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c  PERMUTE bit set,
10f00 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
10f10 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
10f20 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .** determined b
10f30 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
10f40 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
10f50 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74   operator.  If t
10f60 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52  he.** OPFLAG_PER
10f70 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61  MUTE bit is clea
10f80 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  r, then register
10f90 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e   are compared in
10fa0 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f   sequential.** o
10fb0 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  rder..**.** P4 i
10fc0 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  s a KeyInfo stru
10fd0 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e  cture that defin
10fe0 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  es collating seq
10ff0 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a  uences and sort.
11000 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68  ** orders for th
11010 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54  e comparison.  T
11020 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61  he permutation a
11030 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74  pplies to regist
11040 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  ers.** only.  Th
11050 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e  e KeyInfo elemen
11060 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75  ts are used sequ
11070 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  entially..**.** 
11080 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  The comparison i
11090 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69  s a sort compari
110a0 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f  son, so NULLs co
110b0 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20  mpare equal,.** 
110c0 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74  NULLs are less t
110d0 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d  han numbers, num
110e0 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68  bers are less th
110f0 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61  an strings,.** a
11100 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c  nd strings are l
11110 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
11120 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61  */.case OP_Compa
11130 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  re: {.  int n;. 
11140 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31   int i;.  int p1
11150 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f  ;.  int p2;.  co
11160 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
11170 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78  yInfo;.  int idx
11180 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
11190 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  ll;    /* Collat
111a0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ing sequence to 
111b0 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d  use on this term
111c0 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20   */.  int bRev; 
111d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
111e0 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20   for DESCENDING 
111f0 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20  sort order */.. 
11200 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
11210 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
11220 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20  =0 ) aPermute = 
11230 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  0;.  n = pOp->p3
11240 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ;.  pKeyInfo = p
11250 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
11260 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29  .  assert( n>0 )
11270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
11280 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20  Info!=0 );.  p1 
11290 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
112a0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53  = pOp->p2;.#if S
112b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
112c0 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
112d0 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
112e0 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
112f0 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
11300 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
11310 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
11320 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11330 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p1+mx<=(p->nM
11340 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11350 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11360 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
11370 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
11380 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11390 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
113a0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
113b0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
113c0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
113d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
113e0 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
113f0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11400 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  sor)+1 );.  }.#e
11410 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
11420 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
11430 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
11440 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
11450 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
11460 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
11470 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11480 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
11490 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
114a0 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
114b0 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
114c0 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
114d0 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
114e0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
114f0 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
11500 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
11510 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
11520 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  fo->nField );.  
11530 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e    pColl = pKeyIn
11540 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20  fo->aColl[i];.  
11550 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66    bRev = pKeyInf
11560 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d  o->aSortOrder[i]
11570 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
11580 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
11590 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
115a0 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
115b0 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
115c0 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
115d0 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
115e0 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
115f0 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
11600 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
11610 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
11620 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11630 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
11640 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
11650 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
11660 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
11670 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
11680 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
11690 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
116a0 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
116b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
116c0 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
116d0 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
116e0 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
116f0 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
11700 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
11710 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
11720 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
11730 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
11740 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
11750 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
11760 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d  aken(0,3); pOp =
11770 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20   &aOp[pOp->p1 - 
11780 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  1];.  }else if( 
11790 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
117a0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
117b0 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(1,3); pOp = &
117c0 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
117d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
117e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
117f0 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11800 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20  pOp->p3 - 1];.  
11810 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11820 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
11830 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
11840 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
11850 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a  P1] && r[P2]).**
11860 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
11870 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
11880 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
11890 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
118a0 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
118b0 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
118c0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
118d0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
118e0 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
118f0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
11900 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
11910 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
11920 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
11930 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
11940 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
11950 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
11960 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
11970 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
11980 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
11990 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a  P1] || r[P2]).**
119a0 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
119b0 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76  ical OR of the v
119c0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
119d0 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
119e0 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73  ** store the ans
119f0 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  wer in register 
11a00 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
11a10 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
11a20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74  nonzero (true) t
11a30 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
11a40 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76  s 1 (true).** ev
11a50 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20  en if the other 
11a60 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
11a70 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65  A NULL and false
11a80 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a   or two NULLs.**
11a90 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74   give a NULL out
11aa0 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
11ab0 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
11ac0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11ad0 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
11ae0 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ut3 */.case OP_O
11af0 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  r: {            
11b00 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f   /* same as TK_O
11b10 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
11b20 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20  3 */.  int v1;  
11b30 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e    /* Left operan
11b40 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  d:  0==FALSE, 1=
11b50 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
11b60 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  N or NULL */.  i
11b70 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67  nt v2;    /* Rig
11b80 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46  ht operand: 0==F
11b90 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
11ba0 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
11bb0 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  L */..  pIn1 = &
11bc0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11bd0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
11be0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11bf0 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c     v1 = 2;.  }el
11c00 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c  se{.    v1 = sql
11c10 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11c20 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn1)!=0;.  }. 
11c30 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
11c40 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
11c50 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
11c60 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d  Null ){.    v2 =
11c70 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
11c80 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v2 = sqlite3Vdb
11c90 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21  eIntValue(pIn2)!
11ca0 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  =0;.  }.  if( pO
11cb0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e  p->opcode==OP_An
11cc0 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  d ){.    static 
11cd0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
11ce0 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20  har and_logic[] 
11cf0 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  = { 0, 0, 0, 0, 
11d00 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b  1, 2, 0, 2, 2 };
11d10 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f  .    v1 = and_lo
11d20 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
11d30 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69  }else{.    stati
11d40 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
11d50 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d   char or_logic[]
11d60 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c   = { 0, 1, 2, 1,
11d70 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d   1, 1, 2, 1, 2 }
11d80 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f  ;.    v1 = or_lo
11d90 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
11da0 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  }.  pOut = &aMem
11db0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
11dc0 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
11dd0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
11de0 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
11df0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
11e00 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
11e10 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
11e20 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
11e30 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11e40 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
11e50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11e60 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b  psis: r[P2]= !r[
11e70 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
11e80 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
11e90 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
11ea0 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
11eb0 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
11ec0 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
11ed0 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
11ee0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
11ef0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
11f00 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
11f10 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
11f20 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
11f30 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
11f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11f50 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
11f60 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11f70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11f80 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11f90 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11fa0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
11fb0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
11fc0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11fd0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11fe0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
11ff0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
12000 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69  Out->u.i = !sqli
12010 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
12020 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
12030 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12040 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
12050 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12060 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a  : r[P1]= ~r[P1].
12070 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
12080 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
12090 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
120a0 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
120b0 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
120c0 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
120d0 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
120e0 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
120f0 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
12100 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
12110 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
12120 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
12130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12140 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
12150 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
12160 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12170 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
12180 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
12190 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
121a0 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
121b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
121c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
121d0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
121e0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
121f0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e     pOut->u.i = ~
12200 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
12210 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
12220 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12230 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
12240 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
12250 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c  ck the "once" fl
12260 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66  ag number P1. If
12270 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70   it is set, jump
12280 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
12290 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73  P2. .** Otherwis
122a0 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  e, set the flag 
122b0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
122c0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
122d0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  truction..** In 
122e0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69  other words, thi
122f0 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
12300 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70  all following op
12310 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68  codes up through
12320 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20   P2.** (but not 
12330 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f  including P2) to
12340 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61   run just once a
12350 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64  nd to be skipped
12360 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a   on subsequent.*
12370 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20  * times through 
12380 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  the loop..**.** 
12390 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73  All "once" flags
123a0 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63   are initially c
123b0 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20  leared whenever 
123c0 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
123d0 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65  ment.** first be
123e0 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a  gins to run..*/.
123f0 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
12400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
12410 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
12420 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63   pOp->p1<p->nOnc
12430 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42  eFlag );.  VdbeB
12440 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f  ranchTaken(p->aO
12450 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
12460 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  !=0, 2);.  if( p
12470 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
12480 3e 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  >p1] ){.    goto
12490 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
124a0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
124b0 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
124c0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
124d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
124e0 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
124f0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12500 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12510 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12520 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
12530 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
12540 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
12550 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
12560 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
12570 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
12580 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
12590 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f  he jump if and o
125a0 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  nly if P3 is non
125b0 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  -zero..*/./* Opc
125c0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
125d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
125e0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
125f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12600 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
12610 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
12620 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
12630 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
12640 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
12650 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
12660 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
12670 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
12680 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
12690 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
126a0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
126b0 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  If:             
126c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
126d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f   */.case OP_IfNo
126e0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
126f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
12700 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20    int c;.  pIn1 
12710 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12720 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
12730 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
12740 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
12750 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
12760 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
12770 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
12780 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
12790 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
127a0 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
127b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
127c0 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
127d0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
127e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
127f0 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
12800 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
12810 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29  chTaken(c!=0, 2)
12820 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20  ;.  if( c ){.   
12830 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12840 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
12860 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
12870 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
12880 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
12890 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
128a0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
128b0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
128c0 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
128d0 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
128e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
128f0 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
12900 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12910 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12920 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
12930 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
12940 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12950 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
12960 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12970 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
12980 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12990 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
129a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
129b0 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
129c0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
129d0 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20   if r[P1]!=NULL 
129e0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
129f0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12a00 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12a10 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
12a20 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
12a30 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
12a40 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12a50 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
12a60 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
12a70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12a80 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
12a90 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
12aa0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
12ab0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12ac0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12ad0 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  ull)==0 ){.    g
12ae0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12af0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12b00 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
12b10 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
12b20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
12b30 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
12b40 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
12b50 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
12b60 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
12b70 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
12b80 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
12b90 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
12ba0 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
12bb0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
12bc0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
12bd0 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
12be0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
12bf0 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
12c00 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
12c10 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
12c20 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
12c30 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
12c40 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
12c50 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
12c60 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
12c70 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
12c80 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
12c90 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
12ca0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
12cb0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
12cc0 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
12cd0 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
12ce0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
12cf0 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
12d00 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
12d10 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
12d20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
12d30 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
12d40 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
12d50 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
12d60 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
12d70 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
12d80 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
12d90 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
12da0 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
12db0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
12dc0 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
12dd0 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
12de0 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
12df0 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
12e00 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
12e10 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
12e20 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
12e30 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
12e40 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
12e50 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
12e60 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
12e70 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
12e80 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
12e90 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
12ea0 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
12eb0 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
12ec0 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
12ed0 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
12ee0 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
12ef0 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
12f00 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
12f10 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
12f20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
12f30 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
12f40 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
12f50 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
12f60 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
12f70 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
12f80 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
12f90 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
12fa0 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20  n: {.  int p2;  
12fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
12fc0 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
12fd0 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
12fe0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
12ff0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
13000 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
13010 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
13020 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
13030 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
13040 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
13050 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
13060 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
13070 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
13080 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
13090 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
130a0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
130b0 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
130c0 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
130d0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
130e0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
130f0 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  er */.  Mem *pDe
13100 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
13110 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
13120 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
13130 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
13140 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
13150 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
13160 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
13170 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
13180 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74  zData;   /* Part
13190 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
131a0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
131b0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72    const u8 *zHdr
131c0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70  ;    /* Next unp
131d0 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68  arsed byte of th
131e0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f  e header */.  co
131f0 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  nst u8 *zEndHdr;
13200 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
13210 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
13220 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
13230 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
13240 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
13250 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
13260 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20  u64 offset64;   
13270 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66     /* 64-bit off
13280 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  set */.  u32 ava
13290 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
132a0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
132b0 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
132c0 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
132d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
132e0 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
132f0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
13300 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
13310 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
13320 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
13330 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20  ster */..  pC = 
13340 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
13350 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  ];.  p2 = pOp->p
13360 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  2;..  /* If the 
13370 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
13380 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
13390 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
133a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
133b0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43  CursorMoveto(&pC
133c0 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63  , &p2);.  if( rc
133d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
133e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61  e_to_error;..  a
133f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
13400 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
13410 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
13420 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
13430 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
13440 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
13450 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
13460 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13470 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
13480 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
13490 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
134a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  ;.  assert( p2<p
134b0 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61  C->nField );.  a
134c0 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
134d0 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20  fset;.  assert( 
134e0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
134f0 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
13500 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13510 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
13520 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
13530 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Row );.  assert(
13540 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13550 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b  URTYPE_SORTER );
13560 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
13570 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 69 66  c.pCursor;..  if
13580 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
13590 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s!=p->cacheCtr )
135a0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
135b0 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
135c0 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69  IF-FALSE*/.    i
135d0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
135e0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
135f0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
13600 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20  E_PSEUDO ){.    
13610 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13620 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  uc.pseudoTableRe
13630 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
13640 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
13650 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  uc.pseudoTableRe
13660 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  g];.        asse
13670 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
13680 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
13690 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
136a0 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
136b0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
136c0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
136d0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20  szRow = avail = 
136e0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20  pReg->n;.       
136f0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
13700 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20  )pReg->z;.      
13710 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
13720 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13730 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
13740 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13750 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
13760 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13770 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
13780 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
13790 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61  BTREE );.      a
137a0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
137b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
137c0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
137d0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
137e0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c  ;.      pC->payl
137f0 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74 65  oadSize = sqlite
13800 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a  3BtreePayloadSiz
13810 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20 20  e(pCrsr);.      
13820 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
13830 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46 65  e3BtreePayloadFe
13840 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
13850 6c 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  l);.      assert
13860 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29  ( avail<=65536 )
13870 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61  ;  /* Maximum pa
13880 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42  ge size is 64KiB
13890 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
138a0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ->payloadSize <=
138b0 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
138c0 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
138d0 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   = pC->payloadSi
138e0 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ze;.      }else 
138f0 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
13900 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
13910 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
13920 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
13930 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
13940 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ig;.      }else{
13950 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
13960 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20  ow = avail;.    
13970 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43    }.    }.    pC
13980 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
13990 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20  p->cacheCtr;.   
139a0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
139b0 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43  = getVarint32(pC
139c0 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b  ->aRow, offset);
139d0 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72  .    pC->nHdrPar
139e0 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66  sed = 0;.    aOf
139f0 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74  fset[0] = offset
13a00 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69  ;...    if( avai
13a10 6c 3c 6f 66 66 73 65 74 20 29 7b 20 20 20 20 20  l<offset ){     
13a20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
13a30 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
13a40 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
13a50 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
13a60 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
13a70 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
13a80 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
13a90 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
13aa0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
13ab0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
13ac0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
13ad0 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
13ae0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
13af0 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
13b00 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
13b10 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
13b20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
13b30 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13b40 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
13b50 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
13b60 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
13b70 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
13b80 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
13b90 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
13ba0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
13bb0 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
13bc0 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
13bd0 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
13be0 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
13bf0 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
13c00 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
13c10 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
13c20 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
13c30 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
13c40 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
13c50 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13c60 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13c70 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13c80 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
13c90 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
13ca0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
13cb0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
13cc0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
13cd0 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
13ce0 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
13cf0 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
13d00 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
13d10 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
13d20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
13d30 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
13d40 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
13d50 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
13d60 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
13d70 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
13d80 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20     if( offset > 
13d90 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20  98307 || offset 
13da0 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
13db0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
13dc0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
13dd0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
13de0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13df0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13e00 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 66      }else if( of
13e10 66 73 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54 49  fset>0 ){ /*OPTI
13e20 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45  MIZATION-IF-TRUE
13e30 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  */.      /* The 
13e40 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69  following goto i
13e50 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
13e60 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d  n.  It can be om
13e70 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 20 20  itted and.      
13e80 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69  ** everything wi
13e90 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20  ll still work.  
13ea0 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73  But OP_Column is
13eb0 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74   measurably fast
13ec0 65 72 0a 20 20 20 20 20 20 2a 2a 20 62 79 20 73  er.      ** by s
13ed0 6b 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73  kipping the subs
13ee0 65 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e  equent condition
13ef0 61 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77  al, which is alw
13f00 61 79 73 20 74 72 75 65 2e 0a 20 20 20 20 20 20  ays true..      
13f10 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
13f20 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
13f30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
13f40 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
13f50 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
13f60 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
13f70 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
13f80 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
13f90 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  r;.    }.  }..  
13fa0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
13fb0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
13fc0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
13fd0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
13fe0 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
13ff0 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
14000 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
14010 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
14020 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
14030 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
14040 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
14050 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
14060 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
14070 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
14080 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
14090 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
140a0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
140b0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
140c0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
140d0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
140e0 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
140f0 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
14100 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14110 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
14120 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
14130 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
14140 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
14150 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14160 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
14170 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
14180 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
14190 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
141a0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
141b0 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
141c0 4f 66 66 73 65 74 5b 30 5d 2c 20 21 70 43 2d 3e  Offset[0], !pC->
141d0 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b  isTable, &sMem);
141e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
141f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
14200 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
14210 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
14220 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
14230 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
14240 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
14250 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
14260 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
14270 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
14280 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
14290 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
142a0 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
142b0 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75  . */.    op_colu
142c0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
142d0 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
142e0 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
142f0 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
14300 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
14310 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
14320 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
14330 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
14340 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
14350 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
14360 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b    if( (t = zHdr[
14370 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20  0])<0x80 ){.    
14380 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20        zHdr++;.  
14390 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34          offset64
143a0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f   += sqlite3VdbeO
143b0 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70 65  neByteSerialType
143c0 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
143d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
143e0 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   zHdr += sqlite3
143f0 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  GetVarint32(zHdr
14400 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20  , &t);.         
14410 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c   offset64 += sql
14420 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14430 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
14440 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e    }.        pC->
14450 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a  aType[i++] = t;.
14460 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
14470 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65  i] = (u32)(offse
14480 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66  t64 & 0xffffffff
14490 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  );.      }while(
144a0 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
144b0 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20  EndHdr );..     
144c0 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
144d0 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
144e0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
144f0 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20  g are true:.    
14500 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74    ** (1) the byt
14510 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
14520 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68 65   extend past the
14530 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65 72   declared header
14540 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28   size.      ** (
14550 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65  2) the entire he
14560 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75  ader was used bu
14570 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77  t not all data w
14580 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a  as used.      **
14590 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20   (3) the end of 
145a0 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73  the data extends
145b0 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20   beyond the end 
145c0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  of the record.. 
145d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
145e0 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72  ( (zHdr>=zEndHdr
145f0 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64   && (zHdr>zEndHd
14600 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70  r || offset64!=p
14610 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29  C->payloadSize))
14620 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
14630 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  et64 > pC->paylo
14640 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b  adSize).      ){
14650 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 2d  .        if( pC-
14660 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74  >aRow==0 ) sqlit
14670 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
14680 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  (&sMem);.       
14690 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
146a0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
146b0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
146c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
146d0 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e    }..      pC->n
146e0 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20  HdrParsed = i;. 
146f0 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66       pC->iHdrOff
14700 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72  set = (u32)(zHdr
14710 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20   - zData);.     
14720 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
14730 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
14740 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
14750 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
14760 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a    t = 0;.    }..
14770 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20      /* If after 
14780 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63  trying to extrac
14790 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72  t new entries fr
147a0 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e  om the header, n
147b0 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20  HdrParsed is.   
147c0 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70   ** still not up
147d0 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61   to p2, that mea
147e0 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ns that the reco
147f0 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61  rd has fewer tha
14800 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75  n p2.    ** colu
14810 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73  mns.  So the res
14820 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68  ult will be eith
14830 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  er the default v
14840 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a  alue or a NULL..
14850 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
14860 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14870 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  2 ){.      if( p
14880 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d  Op->p4type==P4_M
14890 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  EM ){.        sq
148a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
148b0 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
148c0 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
148d0 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20  _Static);.      
148e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
148f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
14900 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
14910 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
14920 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
14930 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
14940 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
14950 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45  p2];.  }..  /* E
14960 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
14970 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
14980 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
14990 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
149a0 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
149b0 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
149c0 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
149d0 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  , and pC->aType[
149e0 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
149f0 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
14a00 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
14a10 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
14a20 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
14a30 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  _OK );.  assert(
14a40 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
14a50 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70  kMemInvariants(p
14a60 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56  Dest) );.  if( V
14a70 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44  dbeMemDynamic(pD
14a80 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  est) ){.    sqli
14a90 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
14aa0 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20  l(pDest);.  }.  
14ab0 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61  assert( t==pC->a
14ac0 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66  Type[p2] );.  if
14ad0 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
14ae0 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
14af0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
14b00 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
14b10 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
14b20 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
14b30 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
14b40 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
14b50 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
14b60 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
14b70 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44  w page */.    zD
14b80 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b  ata = pC->aRow +
14b90 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20   aOffset[p2];.  
14ba0 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20    if( t<12 ){.  
14bb0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
14bc0 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20  erialGet(zData, 
14bd0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
14be0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49  else{.      /* I
14bf0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
14c00 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20  ue is a string, 
14c10 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73  we need a persis
14c20 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a  tent value, not.
14c30 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45        ** a MEM_E
14c40 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69  phem value.  Thi
14c50 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61  s branch is a fa
14c60 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61  st short-cut tha
14c70 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  t is equivalent.
14c80 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c        ** to call
14c90 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53  ing sqlite3VdbeS
14ca0 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73  erialGet() and s
14cb0 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65  qlite3VdbeDeephe
14cc0 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20  meralize()..    
14cd0 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69    */.      stati
14ce0 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61  c const u16 aFla
14cf0 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62  g[] = { MEM_Blob
14d00 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65  , MEM_Str|MEM_Te
14d10 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73  rm };.      pDes
14d20 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d  t->n = len = (t-
14d30 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65  12)/2;.      pDe
14d40 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
14d50 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44  ng;.      if( pD
14d60 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20  est->szMalloc < 
14d70 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20  len+2 ){.       
14d80 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14d90 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
14da0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
14db0 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20  eMemGrow(pDest, 
14dc0 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f  len+2, 0) ) goto
14dd0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d   no_mem;.      }
14de0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44  else{.        pD
14df0 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e  est->z = pDest->
14e00 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d  zMalloc;.      }
14e10 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44  .      memcpy(pD
14e20 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
14e30 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  en);.      pDest
14e40 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20  ->z[len] = 0;.  
14e50 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
14e60 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  +1] = 0;.      p
14e70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46  Dest->flags = aF
14e80 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a  lag[t&1];.    }.
14e90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65    }else{.    pDe
14ea0 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
14eb0 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  ng;.    /* This 
14ec0 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
14ed0 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74  nly when content
14ee0 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20   is on overflow 
14ef0 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28  pages */.    if(
14f00 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50   ((pOp->p5 & (OP
14f10 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f  FLAG_LENGTHARG|O
14f20 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
14f30 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26  )!=0.          &
14f40 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
14f50 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
14f60 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
14f70 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20  OFARG)!=0)).    
14f80 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74   || (len = sqlit
14f90 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14fa0 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29  Len(t))==0.    )
14fb0 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65  {.      /* Conte
14fc0 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
14fd0 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20   for.      **   
14fe0 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29   1. the typeof()
14ff0 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20   function,.     
15000 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65   **    2. the le
15010 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
15020 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c   if X is a blob,
15030 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20   and.      **   
15040 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65   3. if the conte
15050 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72  nt length is zer
15060 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77  o..      ** So w
15070 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
15080 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  use bogus conten
15090 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
150a0 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63  ading.      ** c
150b0 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
150c0 2e 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  . */.      stati
150d0 63 20 75 38 20 61 5a 65 72 6f 5b 38 5d 3b 20 20  c u8 aZero[8];  
150e0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 62  /* This is the b
150f0 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ogus content */.
15100 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
15110 65 53 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f  eSerialGet(aZero
15120 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
15130 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
15140 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
15150 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
15160 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
15170 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  en, !pC->isTable
15180 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 70 44 65 73 74 29 3b 0a 20 20 20       pDest);.   
151b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
151c0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
151d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
151e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
151f0 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73  eSerialGet((cons
15200 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20  t u8*)pDest->z, 
15210 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  t, pDest);.     
15220 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
15230 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20   ~MEM_Ephem;.   
15240 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d   }.  }..op_colum
15250 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
15260 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
15270 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
15280 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15290 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
152a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
152b0 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
152c0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
152d0 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50   affinity(r[P1@P
152e0 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  2]).**.** Apply 
152f0 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
15300 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
15310 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
15320 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
15330 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
15340 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
15350 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
15360 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
15370 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
15380 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
15390 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
153a0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
153b0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
153c0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
153d0 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
153e0 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
153f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
15400 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
15410 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
15420 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
15430 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
15440 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
15450 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
15460 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
15470 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
15480 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
15490 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
154a0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
154b0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
154c0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
154d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
154e0 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
154f0 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
15500 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
15510 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
15520 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
15530 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
15540 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
15550 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
15560 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
15570 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e  1, cAff, encodin
15580 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
15590 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
155a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
155b0 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
155c0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
155d0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
155e0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
155f0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
15600 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
15610 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
15620 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
15630 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
15640 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
15650 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
15660 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
15670 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
15680 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
15690 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
156a0 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
156b0 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
156c0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
156d0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
156e0 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
156f0 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
15700 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
15710 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
15720 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
15730 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
15740 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
15750 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
15760 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
15770 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
15780 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
15790 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
157a0 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
157b0 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
157c0 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
157d0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
157e0 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
157f0 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
15800 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB..*/.case O
15810 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
15820 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
15830 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
15840 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
15850 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
15860 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
15870 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
15880 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
15890 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
158a0 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
158b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
158c0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
158d0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
158e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
158f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15900 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
15910 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
15920 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
15930 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
15940 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
15950 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e  ecord */.  i64 n
15960 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
15970 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15980 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15990 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
159a0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
159b0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
159c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
159d0 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
159e0 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
159f0 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
15a00 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
15a10 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
15a20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
15a30 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
15a40 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
15a50 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
15a60 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
15a70 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
15a80 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
15a90 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
15aa0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15ab0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
15ac0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
15ad0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
15ae0 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
15af0 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
15b00 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
15b10 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
15b20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
15b30 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
15b40 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
15b50 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
15b60 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
15b70 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
15b80 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69  [] header */.  i
15b90 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
15ba0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
15bb0 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
15bc0 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  d[] content */. 
15bd0 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20   u32 len;       
15be0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
15bf0 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
15c00 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
15c10 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
15c20 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
15c30 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
15c40 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
15c50 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
15c60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
15cb0 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
15cc0 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
15cd0 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
15ce0 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
15cf0 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
15d00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d10 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
15d50 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
15d60 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15d70 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
15d80 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
15d90 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
15da0 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  forth..  **.  **
15db0 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
15dc0 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
15dd0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
15de0 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
15df0 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
15e00 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
15e10 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
15e20 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
15e30 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
15e40 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
15e50 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
15e60 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
15e70 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
15e80 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
15e90 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
15ea0 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
15eb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15ec0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
15ed0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
15ee0 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
15ef0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15f00 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
15f10 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
15f20 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
15f30 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
15f40 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
15f50 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
15f60 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
15f70 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
15f80 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
15f90 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
15fa0 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
15fb0 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
15fc0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
15fd0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
15fe0 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
15ff0 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
16000 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
16010 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
16020 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
16030 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
16040 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
16050 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
16060 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16070 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
16080 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
16090 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
160a0 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
160b0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
160c0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
160d0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
160e0 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
160f0 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
16100 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
16110 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
16120 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
16130 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
16140 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
16150 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
16160 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
16170 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20  ffinity(pRec++, 
16180 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
16190 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
161a0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
161b0 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
161c0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
161d0 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
161e0 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  [0] );.  }..  /*
161f0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
16200 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
16210 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
16220 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
16230 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
16240 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
16250 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
16260 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
16270 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
16280 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16290 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
162a0 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) );.    pRec->u
162b0 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
162c0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
162d0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
162e0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c   file_format, &l
162f0 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  en);.    if( pRe
16300 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
16310 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
16320 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
16330 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16340 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
16350 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Rec) ) goto no_m
16360 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
16370 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
16380 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16390 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
163a0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
163b0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
163c0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
163d0 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
163e0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
163f0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
16400 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
16410 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
16420 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
16430 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
16440 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
16450 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
16460 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61  c==pData0 ) brea
16470 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20  k;.    pRec--;. 
16480 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f   }while(1);..  /
16490 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
164a0 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65  -22564-11647 The
164b0 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
164c0 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
164d0 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64  int.  ** which d
164e0 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f  etermines the to
164f0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
16500 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65  tes in the heade
16510 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20  r. The varint.  
16520 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  ** value is the 
16530 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
16540 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c  er in bytes incl
16550 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
16560 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c  arint.  ** itsel
16570 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  f. */.  testcase
16580 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
16590 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
165a0 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
165b0 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
165c0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
165d0 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
165e0 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
165f0 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
16600 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
16610 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
16620 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
16630 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
16640 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
16650 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
16660 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
16670 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
16680 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
16690 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
166a0 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72    if( nByte+nZer
166b0 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  o>db->aLimit[SQL
166c0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
166d0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
166e0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
166f0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
16700 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
16710 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
16720 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
16730 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
16740 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
16750 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
16760 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
16770 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
16780 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
16790 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
167a0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
167b0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
167c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
167d0 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
167e0 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
167f0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
16800 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
16810 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16820 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
16830 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
16840 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
16850 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
16860 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
16870 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
16880 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
16890 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
168a0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
168b0 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
168c0 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
168d0 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
168e0 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
168f0 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
16900 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
16910 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49  Temp;.    /* EVI
16920 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32  DENCE-OF: R-0652
16930 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e  9-47362 Followin
16940 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
16950 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  t are one or mor
16960 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f  e.    ** additio
16970 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
16980 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a   per column. */.
16990 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
169a0 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
169b0 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
169c0 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
169d0 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
169e0 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
169f0 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
16a00 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
16a10 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
16a20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
16a30 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
16a40 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
16a50 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c   */.    j += sql
16a60 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
16a70 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d  t(&zNewRecord[j]
16a80 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
16a90 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
16aa0 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
16ab0 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
16ac0 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48  .  assert( i==nH
16ad0 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  dr );.  assert( 
16ae0 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  j==nByte );..  a
16af0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
16b00 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
16b10 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
16b20 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
16b30 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
16b40 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
16b50 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
16b60 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
16b70 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
16b80 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
16b90 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
16ba0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
16bb0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
16bc0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
16bd0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
16be0 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
16bf0 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
16c00 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
16c10 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
16c20 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
16c30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16c40 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
16c50 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
16c60 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
16c70 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
16c80 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
16c90 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
16ca0 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
16cb0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
16cc0 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
16cd0 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
16ce0 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
16cf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
16d00 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
16d10 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
16d20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
16d30 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
16d40 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
16d50 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
16d60 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
16d70 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
16d80 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
16d90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
16da0 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  1]->uc.pCursor;.
16db0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
16dc0 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
16dd0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
16de0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
16df0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
16e00 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
16e10 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
16e20 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
16e30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
16e40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16e50 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  r;.  pOut = out2
16e60 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
16e70 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
16e80 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
16e90 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
16ea0 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
16eb0 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
16ec0 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
16ed0 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
16ee0 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
16ef0 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
16f00 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
16f10 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
16f20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
16f30 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  w savepoint, P1=
16f40 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28  =0. To release (
16f50 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78  commit) an.** ex
16f60 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
16f70 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72  , P1==1, or to r
16f80 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
16f90 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31  ing savepoint P1
16fa0 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==2..*/.case OP_
16fb0 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
16fc0 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16fe0 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
16ff0 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
17000 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
17010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
17020 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
17030 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
17040 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
17050 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
17060 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
17070 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
17080 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
17090 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
170a0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
170b0 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
170c0 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
170d0 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
170e0 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
170f0 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
17100 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
17110 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
17120 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
17130 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
17140 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
17150 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
17160 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
17170 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
17180 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
17190 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
171a0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
171b0 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
171c0 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
171d0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
171e0 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
171f0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17200 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
17210 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
17220 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
17230 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17240 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
17250 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
17260 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
17270 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17280 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
17290 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
172a0 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
172b0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
172c0 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
172d0 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
172e0 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
172f0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
17300 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
17310 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
17320 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
17330 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
17340 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74  vepoint - SQL st
17350 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
17360 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
17370 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17380 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17390 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
173a0 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
173b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
173c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
173d0 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
173e0 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
173f0 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
17400 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
17410 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
17420 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
17430 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
17440 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
17450 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
17460 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
17470 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
17480 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
17490 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
174a0 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
174b0 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
174c0 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
174d0 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
174e0 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
174f0 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
17500 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
17510 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
17520 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17530 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
17540 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
17550 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
17580 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
17590 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
175a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
175b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
175c0 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
175d0 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
175e0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
175f0 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
17600 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
17610 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
17620 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
17630 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
17640 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
17650 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
17660 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
17670 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
17680 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
17690 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
176a0 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
176b0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
176c0 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
176d0 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
176e0 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
176f0 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
17700 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
17710 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
17720 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
17730 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
17740 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17750 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
17760 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17770 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
17780 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
17790 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
177a0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
177b0 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20    }..        /* 
177c0 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
177d0 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
177e0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
177f0 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
17800 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
17810 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17820 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
17830 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
17840 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
17850 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
17860 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
17870 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
17880 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
17890 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
178a0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
178b0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
178c0 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
178d0 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20  0;..    /* Find 
178e0 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f  the named savepo
178f0 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73  int. If there is
17900 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69   no such savepoi
17910 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20  nt, then an.    
17920 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  ** an error is r
17930 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
17940 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72  ser.  */.    for
17950 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  (.      pSavepoi
17960 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  nt = db->pSavepo
17970 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76  int; .      pSav
17980 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65  epoint && sqlite
17990 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f  3StrICmp(pSavepo
179a0 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  int->zName, zNam
179b0 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70  e);.      pSavep
179c0 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
179d0 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a  t->pNext.    ){.
179e0 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
179f0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
17a00 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  ( !pSavepoint ){
17a10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
17a20 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73  beError(p, "no s
17a30 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
17a40 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
17a50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
17a60 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
17a70 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
17a80 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
17a90 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
17aa0 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
17ab0 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
17ac0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
17ad0 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
17ae0 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
17af0 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
17b00 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
17b10 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
17b20 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
17b30 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73  cannot release s
17b40 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17b70 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17b80 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
17b90 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17ba0 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
17bb0 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
17bc0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
17bd0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
17be0 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
17bf0 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
17c00 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
17c10 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
17c20 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
17c30 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
17c40 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
17c50 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
17c60 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
17c70 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
17c80 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
17c90 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17ca0 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
17cb0 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
17cc0 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
17cd0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
17ce0 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
17cf0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
17d00 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
17d10 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
17d20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17d30 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
17d40 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17d50 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
17d60 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17d70 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
17d80 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
17d90 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
17da0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
17db0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17dc0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
17dd0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
17de0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17df0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
17e00 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
17e10 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
17e20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
17e30 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
17e40 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
17e50 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17e60 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d       int isSchem
17e70 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
17e80 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
17e90 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
17ea0 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
17eb0 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
17ec0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
17ed0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  K ){.          i
17ee0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
17ef0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
17f00 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
17f10 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  s)!=0;.         
17f20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
17f30 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17f40 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
17f50 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
17f60 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
17f70 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20  b[ii].pBt,.     
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52    SQLITE_ABORT_R
17fb0 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20  OLLBACK,.       
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d  isSchemaChange==
17ff0 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
18000 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18010 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
18020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18030 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18040 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18050 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
18060 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
18070 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
18080 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
18090 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
180a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
180b0 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
180c0 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
180d0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
180e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
180f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18100 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
18110 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18120 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
18130 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
18140 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
18150 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
18160 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
18170 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
18180 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
18190 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
181a0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
181b0 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
181c0 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
181d0 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
181e0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
181f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
18200 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
18210 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
18220 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
18230 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
18240 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
18250 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
18260 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
18270 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
18280 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18290 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
182a0 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
182b0 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
182c0 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
182d0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
182e0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
182f0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
18300 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
18310 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
18320 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
18330 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
18340 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
18350 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
18360 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
18370 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
18380 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
18390 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
183a0 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
183b0 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
183c0 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
183d0 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
183e0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
183f0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
18400 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
18410 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
18420 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
18430 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
18440 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
18450 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
18460 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
18470 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
18480 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
18490 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
184a0 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
184b0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
184c0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
184d0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
184e0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
184f0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
18500 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
18510 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
18520 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
18530 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
18540 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18550 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
18560 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18570 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
18580 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
18590 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
185a0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
185b0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
185c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
185d0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
185e0 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
185f0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
18600 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18610 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
18620 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
18630 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
18640 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18650 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18660 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
18670 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
18680 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
18690 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
186a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
186b0 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
186c0 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
186d0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
186e0 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
186f0 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
18700 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
18710 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
18720 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
18730 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
18740 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
18750 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
18760 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
18770 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
18780 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
18790 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
187a0 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
187b0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
187c0 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
187d0 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
187e0 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
187f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
18800 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
18810 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
18820 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
18830 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
18840 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
18850 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
18860 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
18870 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
18880 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
18890 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
188a0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
188b0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
188c0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
188d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
188e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
188f0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
18900 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
18910 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
18920 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
18930 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
18940 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
18950 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
18960 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
18970 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
18980 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
18990 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
189a0 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
189b0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
189c0 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
189d0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
189e0 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
189f0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
18a00 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18a10 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
18a20 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
18a30 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
18a40 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
18a50 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
18a60 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
18a70 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
18a80 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
18a90 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
18aa0 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
18ab0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
18ac0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
18ad0 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
18ae0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
18af0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
18b00 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
18b10 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
18b20 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
18b50 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
18b60 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
18b70 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
18b80 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18b90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
18ba0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
18bb0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
18bc0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
18bd0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18be0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18bf0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18c00 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18c10 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
18c20 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
18c30 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
18c40 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
18c50 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18c60 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
18c70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
18c80 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18c90 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
18ca0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
18cb0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18cc0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18cd0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18ce0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
18cf0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18d00 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
18d10 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
18d20 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
18d30 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
18d40 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
18d50 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
18d60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
18d70 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
18d80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
18d90 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18da0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
18db0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
18dc0 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
18dd0 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
18de0 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
18df0 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
18e00 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
18e10 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
18e20 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
18e30 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
18e40 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
18e50 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18e60 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
18e70 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
18e80 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
18e90 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
18ea0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
18eb0 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
18ec0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18ed0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18ee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
18ef0 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
18f00 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
18f10 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18f20 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
18f30 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
18f40 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
18f50 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
18f60 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
18f70 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
18f80 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18f90 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
18fa0 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
18fb0 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
18fc0 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
18fd0 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
18fe0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
18ff0 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
19000 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
19010 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
19020 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
19030 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
19040 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
19050 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
19060 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
19070 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
19080 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
19090 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
190a0 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
190b0 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
190c0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
190d0 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
190e0 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
190f0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
19100 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
19110 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
19120 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19130 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
19140 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
19150 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
19160 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
19170 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
19180 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
19190 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
191a0 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
191b0 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
191c0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
191d0 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
191e0 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
191f0 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
19200 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
19210 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
19220 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
19230 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
19240 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
19250 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
19260 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
19270 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
19280 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
19290 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
192a0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
192b0 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
192c0 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
192d0 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
192e0 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
192f0 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
19300 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
19310 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
19320 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
19330 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
19340 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
19350 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19360 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
19370 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
19380 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
19390 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
193a0 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
193b0 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
193c0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
193d0 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
193e0 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
193f0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
19400 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
19410 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19420 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19430 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19440 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
19450 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
19460 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19470 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
19480 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
19490 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
194a0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
194b0 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
194c0 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
194d0 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
194e0 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
194f0 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
19500 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19510 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
19520 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
19530 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
19540 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
19550 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
19560 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
19570 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
19580 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
19590 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
195a0 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
195b0 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
195c0 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
195d0 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
195e0 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
195f0 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
19600 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
19610 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
19620 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
19630 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
19640 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
19650 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
19660 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
19670 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
19680 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
19690 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
196a0 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
196b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
196c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
196d0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
196e0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
196f0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
19700 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
19710 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
19720 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
19730 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
19740 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
19750 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
19760 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19770 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
19780 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
19790 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
197a0 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
197b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
197c0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
197d0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
197e0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
197f0 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
19800 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
19810 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
19820 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
19830 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
19840 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
19850 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
19860 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
19870 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
19880 72 63 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  rc;.      goto v
19890 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
198a0 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
198b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
198c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
198d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
198e0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
198f0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
19900 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
19910 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
19920 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
19930 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
19940 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
19950 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
19960 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
19970 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
19980 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
19990 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
199a0 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
199b0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
199c0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
199d0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
199e0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
199f0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
19a00 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
19a10 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
19a20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19a30 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
19a40 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
19a50 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
19a60 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
19a70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
19a80 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
19a90 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19aa0 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
19ab0 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
19ac0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
19ad0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
19ae0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
19af0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
19b00 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
19b10 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
19b20 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
19b30 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
19b40 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
19b50 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
19b60 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
19b70 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
19b80 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
19b90 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
19ba0 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
19bb0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
19bc0 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
19bd0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
19be0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19bf0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
19c00 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
19c10 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
19c20 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
19c30 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
19c40 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
19c50 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
19c60 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
19c70 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
19c80 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
19c90 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
19ca0 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
19cb0 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
19cc0 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
19cd0 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
19ce0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
19cf0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
19d00 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
19d10 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
19d20 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
19d30 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
19d40 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
19d50 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
19d60 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
19d70 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
19d80 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
19d90 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
19da0 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
19db0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19dc0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
19dd0 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19de0 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19df0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
19e00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
19e10 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
19e20 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19e30 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
19e40 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
19e50 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
19e60 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
19e70 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
19e80 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
19e90 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
19ea0 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
19eb0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
19ec0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
19ed0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19ee0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19ef0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19f00 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19f10 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19f20 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19f30 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19f40 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19f50 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19f60 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19f70 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19f80 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19f90 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19fa0 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19fb0 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
19fc0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19fd0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19fe0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19ff0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
1a000 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
1a010 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
1a020 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
1a030 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1a040 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1a050 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1a060 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1a070 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1a080 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1a090 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1a0a0 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1a0b0 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1a0c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1a0d0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1a0e0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1a0f0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1a100 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1a110 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1a120 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1a130 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1a140 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1a150 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1a160 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1a170 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1a180 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1a190 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1a1a0 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1a1b0 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1a1c0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1a1d0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1a1e0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1a1f0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1a200 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1a210 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1a220 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1a230 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1a240 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1a250 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a260 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1a270 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1a280 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
1a290 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
1a2a0 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
1a2b0 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
1a2c0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
1a2d0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
1a2e0 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
1a2f0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1a300 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1a310 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1a320 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1a330 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a340 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1a350 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1a360 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1a370 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1a380 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1a390 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1a3a0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1a3b0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1a3c0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1a3d0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1a3e0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1a3f0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1a400 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1a410 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1a420 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1a430 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1a440 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1a450 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1a460 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1a470 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a490 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1a4a0 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1a4b0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1a4c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1a4d0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1a4e0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1a4f0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1a500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a510 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1a520 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1a530 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1a540 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a550 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1a560 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1a570 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a580 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a590 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1a5a0 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1a5b0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1a5c0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1a5d0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1a5e0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1a5f0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1a600 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1a610 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a620 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1a630 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1a640 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e  .** Write the in
1a650 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69  teger value P3 i
1a660 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
1a670 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
1a680 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73   P1..** P2==1 is
1a690 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1a6a0 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74  ion.  P2==2 is t
1a6b0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1a6c0 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20  at..** P2==3 is 
1a6d0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a6e0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1a6f0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1a700 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1a710 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1a720 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1a730 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1a740 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1a750 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1a760 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1a770 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1a780 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1a790 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1a7a0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1a7b0 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1a7c0 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  {.  Db *pDb;.  a
1a7d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1a7e0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1a7f0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1a800 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a810 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a820 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a830 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a840 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a850 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1a860 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1a870 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1a880 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a890 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1a8a0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1a8b0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1a8c0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1a8d0 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74   );.  /* See not
1a8e0 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
1a8f0 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
1a900 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
1a910 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
1a920 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
1a930 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d  t, pOp->p2, pOp-
1a940 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  >p3);.  if( pOp-
1a950 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
1a960 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
1a970 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
1a980 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
1a990 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
1a9a0 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
1a9b0 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
1a9c0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
1a9d0 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  _cookie = pOp->p
1a9e0 33 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  3;.    db->flags
1a9f0 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
1aa00 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73  nChanges;.  }els
1aa10 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1aa20 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1aa30 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1aa40 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1aa50 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1aa60 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1aa70 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1aa80 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1aa90 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1aaa0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1aab0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1aac0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1aad0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1aae0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1aaf0 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1ab00 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1ab10 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1ab20 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1ab30 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
1ab40 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1ab50 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1ab60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ab70 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1ab80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1ab90 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1aba0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1abb0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1abc0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1abd0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1abe0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1abf0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1ac00 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1ac10 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1ac20 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1ac30 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1ac40 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1ac50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1ac60 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1ac70 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1ac80 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1ac90 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1aca0 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1acb0 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1acc0 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1acd0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1ace0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1acf0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1ad00 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1ad10 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1ad20 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1ad30 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1ad40 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1ad50 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1ad60 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1ad70 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1ad80 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1ad90 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
1ada0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1adb0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
1adc0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
1add0 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
1ade0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1adf0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
1ae00 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
1ae10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
1ae20 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
1ae30 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
1ae40 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
1ae50 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
1ae60 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
1ae70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
1ae80 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
1ae90 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
1aea0 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
1aeb0 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
1aec0 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
1aed0 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
1aee0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
1aef0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
1af00 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
1af10 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
1af20 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
1af30 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
1af40 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
1af50 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
1af60 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
1af70 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1af80 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
1af90 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
1afa0 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
1afb0 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
1afc0 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
1afd0 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1afe0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
1aff0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1b000 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1b010 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1b020 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1b030 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b040 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1b050 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1b060 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1b070 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1b080 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1b090 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1b0a0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1b0b0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1b0c0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1b0d0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1b0e0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1b0f0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1b100 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1b110 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1b120 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b130 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
1b140 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1b150 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1b160 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1b170 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1b180 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b190 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1b1a0 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1b1b0 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1b1c0 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1b1d0 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74   ReadOpen except
1b1e0 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a   that it first.*
1b1f0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
1b200 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e  if the cursor on
1b210 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
1b220 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20  pen with a root 
1b230 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  page.** number o
1b240 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69  f P2 and if it i
1b250 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1b260 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1b270 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1b280 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1b290 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1b2a0 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1b2b0 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1b2c0 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1b2d0 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1b2e0 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77  with P5==0 and w
1b2f0 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20  ith P4 being.** 
1b300 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1b310 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1b320 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1b330 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1b340 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68   as.** every oth
1b350 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1b360 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1b370 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d   same cursor num
1b380 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ber..**.** See t
1b390 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f  he OpenRead opco
1b3a0 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  de documentation
1b3b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1b3c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1b3d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1b3e0 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1b3f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1b400 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1b410 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1b420 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1b430 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1b440 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1b450 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1b460 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
1b470 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
1b480 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1b490 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
1b4a0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
1b4b0 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1b4c0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1b4d0 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1b4e0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1b4f0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1b500 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1b510 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1b520 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1b530 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1b540 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1b550 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1b560 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1b570 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1b580 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1b590 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1b5a0 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1b5b0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1b5c0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1b5d0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1b5e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b5f0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1b600 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
1b610 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
1b620 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
1b630 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
1b640 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
1b650 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1b660 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
1b670 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1b680 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1b690 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1b6a0 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1b6b0 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
1b6c0 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
1b6d0 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
1b6e0 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
1b6f0 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
1b700 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
1b710 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
1b720 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
1b730 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
1b740 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1b750 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  x: {.  int nFiel
1b760 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1b770 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1b780 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1b790 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1b7a0 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1b7b0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1b7c0 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1b7d0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1b7e0 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1b7f0 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1b800 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1b810 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1b820 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
1b830 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1b840 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70   pCur && pCur->p
1b850 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f  gnoRoot==(u32)pO
1b860 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73  p->p2 ){.    ass
1b870 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d  ert( pCur->iDb==
1b880 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20  pOp->p3 );      
1b890 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79  /* Guaranteed by
1b8a0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1b8b0 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  tor */.    goto 
1b8c0 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1b8d0 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20  hints;.  }.  /* 
1b8e0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1b8f0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1b900 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1b910 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1b920 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1b930 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1b940 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1b950 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1b960 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
1b970 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1b980 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74  Write:..  assert
1b990 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1b9a0 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1b9b0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1b9c0 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1b9d0 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1b9e0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1b9f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ba00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1ba10 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1ba20 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1ba30 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1ba40 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1ba50 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1ba60 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1ba70 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1ba80 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1ba90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1baa0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1bab0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1bac0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1bad0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1bae0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1baf0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1bb00 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1bb10 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1bb20 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1bb30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1bb40 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1bb50 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1bb60 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1bb70 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1bb80 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1bb90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1bba0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1bbb0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1bbc0 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1bbd0 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1bbe0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1bbf0 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1bc00 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1bc10 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1bc20 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1bc30 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1bc40 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1bc50 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1bc60 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1bc70 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1bc80 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1bc90 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1bca0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1bcb0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1bcc0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1bcd0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1bce0 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1bcf0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1bd00 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1bd10 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1bd20 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1bd30 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1bd40 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1bd50 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1bd60 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1bd70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1bd80 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1bd90 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1bda0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1bdb0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1bdc0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1bdd0 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1bde0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1bdf0 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
1be00 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
1be10 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1be20 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1be30 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1be40 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1be50 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1be60 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1be70 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1be80 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1be90 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1bea0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1beb0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1bec0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1bed0 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20    assert( p2>=2 
1bee0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1bef0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1bf00 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1bf10 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1bf20 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1bf30 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1bf40 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1bf50 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1bf60 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1bf70 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1bf80 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65  Info->nField+pKe
1bf90 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a  yInfo->nXField;.
1bfa0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1bfb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1bfc0 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1bfd0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1bfe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bff0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c000 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1c010 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1c020 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1c030 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1c040 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1c050 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1c060 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1c070 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c080 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1c090 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1c0a0 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1c0b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1c0c0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1c0d0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1c0e0 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1c0f0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1c100 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1c110 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46  EBUG.  pCur->wrF
1c120 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65  lag = wrFlag;.#e
1c130 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
1c140 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1c150 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1c160 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75  KeyInfo, pCur->u
1c170 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  c.pCursor);.  pC
1c180 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1c190 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65  KeyInfo;.  /* Se
1c1a0 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1c1b0 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c  .isTable variabl
1c1c0 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  e. Previous vers
1c1d0 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c  ions of.  ** SQL
1c1e0 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63  ite used to chec
1c1f0 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  k if the root-pa
1c200 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61  ge flags were sa
1c210 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ne at this point
1c220 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74  .  ** and report
1c230 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
1c240 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72  tion if they wer
1c250 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20  e not, but this 
1c260 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73  check has.  ** s
1c270 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  ince moved into 
1c280 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
1c290 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69    */  .  pCur->i
1c2a0 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
1c2b0 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
1c2c0 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73  ;..open_cursor_s
1c2d0 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65  et_hints:.  asse
1c2e0 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1c2f0 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1c300 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AD );.  assert( 
1c310 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42  OPFLAG_SEEKEQ==B
1c320 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a  TREE_SEEK_EQ );.
1c330 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
1c340 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1c350 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53  KCSR );.#ifdef S
1c360 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
1c370 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74  SOR_HINTS.  test
1c380 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20  case( pOp->p2 & 
1c390 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1c3a0 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
1c3b0 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1c3c0 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70  Flags(pCur->uc.p
1c3d0 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20  Cursor,.        
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
1c400 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  & (OPFLAG_BULKCS
1c410 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1c420 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  ));.  if( rc ) g
1c430 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c440 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1c450 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1c460 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1c470 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1c480 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1c490 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1c4a0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1c4b0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1c4c0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1c4d0 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1c4e0 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1c4f0 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1c500 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1c510 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1c520 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1c530 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1c540 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1c550 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1c560 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1c570 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1c580 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1c590 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1c5a0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1c5b0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1c5c0 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1c5d0 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1c5e0 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1c5f0 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1c600 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1c610 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1c620 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1c630 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1c640 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1c650 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1c660 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1c670 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1c680 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1c690 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1c6a0 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1c6b0 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1c6c0 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1c6d0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1c6e0 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1c6f0 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1c700 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1c710 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1c720 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1c730 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1c740 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1c750 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1c760 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1c770 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1c780 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1c790 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1c7a0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1c7b0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1c7c0 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1c7d0 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1c7e0 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1c7f0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1c800 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1c810 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1c820 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1c830 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1c840 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1c850 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c860 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1c870 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c880 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1c890 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1c8a0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1c8b0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1c8c0 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1c8d0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1c8e0 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1c8f0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1c900 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1c910 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1c920 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c930 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1c940 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1c950 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1c960 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1c970 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1c980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1c990 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1c9a0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1c9b0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1c9c0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1c9d0 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1c9e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1c9f0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1ca00 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1ca10 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1ca20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ca30 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1ca40 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1ca50 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1ca60 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1ca70 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1ca80 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1ca90 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1caa0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1cab0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1cac0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1cad0 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1cae0 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1caf0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1cb00 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1cb10 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1cb20 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1cb30 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1cb40 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1cb50 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1cb60 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1cb70 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1cb80 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1cb90 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1cba0 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1cbb0 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1cbc0 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1cbd0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1cbe0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1cbf0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1cc00 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1cc10 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1cc20 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1cc30 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1cc40 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1cc50 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1cc60 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1cc70 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1cc80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1cc90 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1cca0 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1ccb0 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1ccc0 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1ccd0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1cce0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1ccf0 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1cd00 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1cd10 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1cd20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1cd30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1cd40 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1cd50 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1cd60 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1cd70 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1cd80 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1cd90 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1cda0 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1cdb0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1cde0 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1cdf0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1ce00 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1ce10 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1ce20 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1ce30 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ce40 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1ce50 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57  ER_ROOT, BTREE_W
1ce60 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70      0, pCx->uc.p
1ce90 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1cea0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1ceb0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1cec0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1ced0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1cee0 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20   pCx->isOrdered 
1cef0 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45  = (pOp->p5!=BTRE
1cf00 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20  E_UNORDERED);.  
1cf10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1cf20 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
1cf30 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1cf40 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1cf50 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1cf60 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1cf70 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1cf80 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1cf90 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1cfa0 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1cfb0 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1cfc0 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1cfd0 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1cfe0 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1cff0 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67  hm..**.** If arg
1d000 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d  ument P3 is non-
1d010 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e  zero, then it in
1d020 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65  dicates that the
1d030 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61   sorter may.** a
1d040 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61  ssume that a sta
1d050 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65  ble sort conside
1d060 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50  ring the first P
1d070 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68  3 fields of each
1d080 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69  .** key is suffi
1d090 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65  cient to produce
1d0a0 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65   the required re
1d0b0 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sults..*/.case O
1d0c0 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
1d0d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d0e0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1d0f0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1d100 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1d110 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1d120 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1d130 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1d140 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54  -1, CURTYPE_SORT
1d150 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  ER);.  if( pCx==
1d160 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1d170 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1d180 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1d190 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1d1a0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1d1b0 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1d1c0 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1d1d0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1d1e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1d1f0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1d200 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
1d210 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1d220 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d230 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1d240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1d250 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
1d260 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1d270 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
1d280 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
1d290 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
1d2a0 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
1d2b0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
1d2c0 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
1d2d0 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
1d2e0 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
1d2f0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
1d300 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
1d310 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
1d320 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
1d330 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
1d340 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1d350 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
1d360 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1d370 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d380 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d390 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1d3a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d3b0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
1d3c0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66  rter(pC) );.  if
1d3d0 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b  ( (pC->seqCount+
1d3e0 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  +)==0 ){.    got
1d3f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
1d400 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d410 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1d420 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1d430 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
1d440 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
1d450 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
1d460 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
1d470 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
1d480 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1d490 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
1d4a0 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
1d4b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
1d4c0 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
1d4d0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
1d4e0 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
1d4f0 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
1d500 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1d510 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1d520 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1d530 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1d540 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1d550 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
1d560 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1d570 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1d580 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1d590 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1d5a0 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1d5b0 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1d5c0 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1d5d0 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1d5e0 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1d5f0 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1d600 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1d610 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1d620 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1d630 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1d640 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1d650 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1d660 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1d670 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1d680 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1d690 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1d6a0 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1d6b0 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1d6c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1d6d0 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1d6e0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1d6f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d700 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d710 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
1d720 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1d730 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1d740 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55   pOp->p3, -1, CU
1d750 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20  RTYPE_PSEUDO);. 
1d760 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1d770 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1d780 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1d790 20 70 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54   pCx->uc.pseudoT
1d7a0 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
1d7b0 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1d7c0 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  e = 1;.  assert(
1d7d0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1d7e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1d7f0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1d800 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1d810 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1d820 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1d830 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1d840 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1d850 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1d860 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1d870 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1d880 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1d890 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1d8a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1d8b0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1d8c0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1d8d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d8e0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1d8f0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1d900 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
1d910 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1d920 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f  LUMN_USED_MASK./
1d930 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
1d940 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20  sUsed P1 * * P4 
1d950 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1d960 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20  ode (which only 
1d970 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65  exists if SQLite
1d980 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
1d990 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  th.** SQLITE_ENA
1d9a0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1d9b0 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73  MASK) identifies
1d9c0 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f   which columns o
1d9d0 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f  f the.** table o
1d9e0 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73  r index for curs
1d9f0 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20  or P1 are used. 
1da00 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20   P4 is a 64-bit 
1da10 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49  integer.** (P4_I
1da20 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74  NT64) in which t
1da30 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73  he first 63 bits
1da40 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63   are one for eac
1da50 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73  h of the.** firs
1da60 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  t 63 columns of 
1da70 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1da80 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75  ex that are actu
1da90 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20  ally used.** by 
1daa0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65  the cursor.  The
1dab0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1dac0 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f  is set if any co
1dad0 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68  lumn after.** th
1dae0 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a  e 64th is used..
1daf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
1db00 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65  nsUsed: {.  Vdbe
1db10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43  Cursor *pC;.  pC
1db20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1db30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1db40 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1db50 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1db60 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20   pC->maskUsed = 
1db70 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70  *(u64*)pOp->p4.p
1db80 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
1db90 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1dba0 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20  e: SeekGE P1 P2 
1dbb0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1dbc0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1dbd0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1dbe0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1dbf0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1dc00 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1dc10 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1dc20 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1dc30 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1dc40 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
1dc50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1dc60 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1dc70 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1dc80 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1dc90 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1dca0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1dcb0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1dcc0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1dcd0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1dce0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1dcf0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1dd00 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1dd10 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1dd20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1dd30 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1dd40 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1dd50 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1dd60 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
1dd70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1dd80 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1dd90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1dda0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1ddb0 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1ddc0 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1ddd0 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1dde0 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1ddf0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1de00 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1de10 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1de20 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1de30 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1de40 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1de50 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1de60 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1de70 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1de80 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1de90 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1dea0 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f  by an IdxLE opco
1deb0 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1dec0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1ded0 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  he IdxLE opcode 
1dee0 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1def0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1df00 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1df10 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  .** IdxLE opcode
1df20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1df30 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1df40 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1df50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1df60 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1df70 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1df80 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1df90 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1dfa0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1dfb0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1dfc0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1dfd0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1dfe0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1dff0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1e000 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e010 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1e020 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1e030 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1e040 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
1e050 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1e060 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1e070 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1e080 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1e090 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1e0a0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1e0b0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1e0c0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1e0d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1e0e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1e0f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1e100 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1e110 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1e120 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1e130 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1e140 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1e150 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1e160 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1e170 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1e180 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1e190 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1e1a0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1e1b0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1e1c0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1e1d0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1e1e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1e1f0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1e200 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1e210 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1e220 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1e230 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1e240 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1e250 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1e260 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1e270 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1e280 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1e290 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1e2a0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1e2b0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1e2c0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1e2d0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1e2e0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1e2f0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1e300 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1e310 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1e320 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1e330 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
1e340 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1e350 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1e360 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1e370 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1e380 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1e390 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1e3a0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1e3b0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1e3c0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1e3d0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1e3e0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1e3f0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1e400 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e410 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1e420 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1e430 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1e440 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1e450 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1e460 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1e470 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1e480 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1e490 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1e4a0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1e4b0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1e4c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e4d0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1e4e0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1e4f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1e500 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1e510 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1e520 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1e530 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1e540 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1e550 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1e560 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1e570 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1e580 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1e590 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1e5a0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1e5b0 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1e5c0 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
1e5d0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1e5e0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1e5f0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1e600 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1e610 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
1e620 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e630 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1e640 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1e650 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1e660 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1e670 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1e680 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1e690 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1e6a0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1e6b0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1e6c0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1e6d0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1e6e0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e6f0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1e700 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1e710 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1e720 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1e730 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1e740 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1e750 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1e760 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1e770 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1e780 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1e790 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1e7a0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1e7b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1e7c0 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1e7d0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1e7e0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1e7f0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1e800 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1e810 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1e820 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1e830 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1e840 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1e850 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1e860 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1e870 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1e880 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1e890 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1e8a0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1e8b0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1e8c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1e8d0 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
1e8e0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
1e8f0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
1e900 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
1e910 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
1e920 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
1e930 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
1e940 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
1e950 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
1e960 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1e970 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
1e980 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
1e990 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
1e9a0 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
1e9b0 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f  ed by an IdxGE o
1e9c0 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
1e9d0 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
1e9e0 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f  * The IdxGE opco
1e9f0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
1ea00 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
1ea10 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
1ea20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63  the.** IdxGE opc
1ea30 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1ea40 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
1ea50 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
1ea60 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ea70 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1ea80 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1ea90 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1eaa0 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
1eab0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1eac0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1ead0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1eae0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1eaf0 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
1eb00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1eb10 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1eb20 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  T: {       /* ju
1eb30 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1eb40 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1eb50 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
1eb60 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63  sult */.  int oc
1eb70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1eb80 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65  Opcode */.  Vdbe
1eb90 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
1eba0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20  * The cursor to 
1ebb0 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b  seek */.  Unpack
1ebc0 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20  edRecord r;  /* 
1ebd0 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20  The key to seek 
1ebe0 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  for */.  int nFi
1ebf0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
1ec00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1ec10 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68   or fields in th
1ec20 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69  e key */.  i64 i
1ec30 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Key;          /*
1ec40 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1ec50 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1ec60 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20    int eqOnly;   
1ec70 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74       /* Only int
1ec80 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65  erested in == re
1ec90 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65  sults */..  asse
1eca0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ecb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ecc0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1ecd0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1ece0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1ecf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ed00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1ed10 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1ed20 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1ed30 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
1ed40 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f  OP_SeekLE == OP_
1ed50 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73  SeekLT+1 );.  as
1ed60 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20  sert( OP_SeekGE 
1ed70 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29  == OP_SeekLT+2 )
1ed80 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1ed90 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGT == OP_Seek
1eda0 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+3 );.  assert
1edb0 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
1edc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1edd0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
1ede0 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1edf0 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d  code;.  eqOnly =
1ee00 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   0;.  pC->nullRo
1ee10 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51  w = 0;.#ifdef SQ
1ee20 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1ee30 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
1ee40 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20  pcode;.#endif.. 
1ee50 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1ee60 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42   ){.    /* The B
1ee70 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61  TREE_SEEK_EQ fla
1ee80 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e  g is only set on
1ee90 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a   index cursors *
1eea0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  /.    assert( sq
1eeb0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1eec0 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
1eed0 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
1eee0 45 4b 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a 20 20  EK_EQ)==0 );..  
1eef0 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1ef00 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1ef10 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1ef20 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1ef30 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1ef40 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1ef50 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1ef60 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1ef70 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1ef80 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1ef90 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f  o convert it. */
1efa0 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
1efb0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1efc0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1efd0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
1efe0 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
1eff0 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
1f000 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1f010 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a  inity(pIn3, 0);.
1f020 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d      }.    iKey =
1f030 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1f040 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20  alue(pIn3);..   
1f050 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1f060 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
1f070 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1f080 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
1f090 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  ut.    ** loss o
1f0a0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
1f0b0 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
1f0c0 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
1f0d0 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  ed... */.    if(
1f0e0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1f0f0 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
1f100 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1f110 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1f120 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1f130 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1f140 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1f150 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1f160 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1f170 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  ,.        ** the
1f180 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1f190 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1f1a0 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1f1b0 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
1f1c0 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20  aken(1,2); goto 
1f1d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
1f1e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1f1f0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1f200 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1f210 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
1f220 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1f230 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1f240 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1f250 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
1f260 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
1f270 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
1f280 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
1f290 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
1f2a0 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
1f2b0 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
1f2c0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1f2d0 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
1f2e0 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
1f2f0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1f300 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
1f310 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
1f320 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1f330 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
1f340 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1f350 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f360 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
1f370 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1f380 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
1f390 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
1f3a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f3b0 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
1f3c0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1f3d0 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
1f3e0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1f3f0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1f400 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1f410 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
1f420 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1f430 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1f440 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
1f450 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1f460 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1f470 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1f480 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
1f490 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
1f4a0 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
1f4b0 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
1f4c0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1f4d0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1f4e0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1f4f0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1f500 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1f510 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1f520 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f530 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1f540 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1f550 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1f560 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1f570 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1f580 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1f590 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1f5a0 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1f5b0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1f5c0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
1f5d0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1f5e0 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
1f5f0 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1f600 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
1f610 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
1f620 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ete */.    if( r
1f630 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1f640 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f650 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f660 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1f670 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f    /* For a curso
1f680 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  r with the BTREE
1f690 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f  _SEEK_EQ hint, o
1f6a0 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47  nly the OP_SeekG
1f6b0 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f  E and.    ** OP_
1f6c0 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61  SeekLE opcodes a
1f6d0 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20  re allowed, and 
1f6e0 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d  these must be im
1f6f0 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
1f700 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20  ed.    ** by an 
1f710 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49  OP_IdxGT or OP_I
1f720 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73  dxLT opcode, res
1f730 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20  pectively, with 
1f740 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20  the same key..  
1f750 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c    */.    if( sql
1f760 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1f770 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
1f780 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
1f790 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65  K_EQ) ){.      e
1f7a0 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20  qOnly = 1;.     
1f7b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1f7c0 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  code==OP_SeekGE 
1f7d0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1f7e0 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
1f7f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1f800 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1f810 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
1f820 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
1f830 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1f840 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d  Op[1].p1==pOp[0]
1f850 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p1 );.      ass
1f860 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d  ert( pOp[1].p2==
1f870 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20  pOp[0].p2 );.   
1f880 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1f890 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20  ].p3==pOp[0].p3 
1f8a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1f8b0 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f   pOp[1].p4.i==pO
1f8c0 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20  p[0].p4.i );.   
1f8d0 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   }..    nField =
1f8e0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1f8f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1f900 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1f910 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
1f920 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
1f930 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1f940 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1f950 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1f960 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
1f970 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
1f980 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
1f990 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
1f9a0 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
1f9b0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
1f9c0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1f9d0 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
1f9e0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
1f9f0 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1fa00 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1fa10 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
1fa20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1fa30 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
1fa40 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
1fa50 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
1fa60 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
1fa70 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1fa80 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1fa90 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1faa0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1fab0 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
1fac0 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1fad0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1fae0 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
1faf0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
1fb00 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1fb10 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
1fb20 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
1fb30 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1fb40 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1fb50 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1fb60 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1fb70 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1fb80 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1fb90 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1fba0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1fbb0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1fbc0 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 2e 65 71  .aMem);.    r.eq
1fbd0 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63  Seen = 0;.    rc
1fbe0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1fbf0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1fc00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
1fc10 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1fc20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1fc30 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1fc40 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fc50 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
1fc60 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72   if( eqOnly && r
1fc70 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20  .eqSeen==0 ){.  
1fc80 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 21      assert( res!
1fc90 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
1fca0 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b   seek_not_found;
1fcb0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d  .    }.  }.  pC-
1fcc0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1fcd0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1fce0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1fcf0 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1fd00 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1fd10 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1fd20 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
1fd30 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
1fd40 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1fd50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
1fd60 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
1fd70 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1fd80 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1fd90 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
1fda0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1fdb0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fdc0 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Next(pC->uc.pCur
1fdd0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1fde0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1fdf0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1fe00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1fe10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fe20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
1fe30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1fe40 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1fe50 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
1fe60 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  LE );.    if( re
1fe70 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1fe80 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29  & oc==OP_SeekLT)
1fe90 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1fea0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
1feb0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1fec0 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  us(pC->uc.pCurso
1fed0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1fee0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fef0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1ff00 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1ff10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
1ff20 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1ff30 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1ff40 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1ff50 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1ff60 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1ff70 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1ff80 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
1ff90 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1ffa0 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Eof(pC->uc.pCurs
1ffb0 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73  or);.    }.  }.s
1ffc0 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20  eek_not_found:. 
1ffd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1ffe0 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  >0 );.  VdbeBran
1fff0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
20000 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
20010 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
20020 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  _p2;.  }else if(
20030 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61   eqOnly ){.    a
20040 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
20050 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
20060 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
20070 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
20080 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20   pOp++; /* Skip 
20090 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20  the OP_IdxLt or 
200a0 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f  OP_IdxGT that fo
200b0 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62  llows */.  }.  b
200c0 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
200d0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
200e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
200f0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20100 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20110 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20120 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20130 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20140 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20150 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20160 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20170 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20180 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20190 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
201a0 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
201b0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
201c0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
201d0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
201e0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
201f0 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
20200 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
20210 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
20220 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
20230 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
20240 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
20250 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
20260 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
20270 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
20280 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
20290 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
202a0 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
202b0 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
202c0 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
202d0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
202e0 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
202f0 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
20300 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
20310 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
20320 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
20330 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
20340 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
20350 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
20360 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
20370 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
20380 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
20390 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
203a0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
203b0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
203c0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
203d0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
203e0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
203f0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
20400 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
20410 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
20420 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
20430 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
20440 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
20450 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
20460 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
20470 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
20480 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
20490 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
204a0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
204b0 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
204c0 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
204d0 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
204e0 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
204f0 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
20500 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
20510 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
20520 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
20530 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
20540 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20550 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
20560 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
20570 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
20580 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
20590 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
205a0 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
205b0 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
205c0 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
205d0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
205e0 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
205f0 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
20600 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
20610 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
20620 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20630 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
20640 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
20650 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
20660 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
20670 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20680 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
20690 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
206a0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
206b0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
206c0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
206d0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
206e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
206f0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
20700 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
20710 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
20720 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
20730 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
20740 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
20750 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
20760 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
20770 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
20780 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
20790 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
207a0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
207b0 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
207c0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
207d0 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
207e0 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
207f0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
20800 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
20810 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
20820 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
20830 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
20840 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
20850 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
20860 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20870 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
20880 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
20890 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
208a0 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
208b0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
208c0 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
208d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
208e0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
208f0 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
20900 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
20910 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
20920 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
20930 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
20940 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
20950 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
20960 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
20970 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
20980 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
20990 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
209a0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
209b0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
209c0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
209d0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
209e0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
209f0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
20a00 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
20a10 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
20a20 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
20a30 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
20a40 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
20a50 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
20a60 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
20a70 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
20a80 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
20a90 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
20aa0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20ab0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
20ac0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
20ad0 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
20ae0 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
20af0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
20b00 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
20b10 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
20b20 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
20b30 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
20b40 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
20b50 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
20b60 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
20b70 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
20b80 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *4 + 7];..#ifdef
20b90 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
20ba0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
20bb0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
20bc0 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
20bd0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
20be0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20bf0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20c00 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
20c10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
20c20 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
20c30 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20c40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20c50 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
20c60 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20c70 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
20c80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
20c90 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
20ca0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
20cb0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
20cc0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
20cd0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
20ce0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
20cf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20d00 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
20d10 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20  .  pFree = 0;.  
20d20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
20d30 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
20d40 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
20d50 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
20d60 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
20d70 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
20d80 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  n3;.    for(ii=0
20d90 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
20da0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
20db0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
20dc0 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
20dd0 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
20de0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69  &r.aMem[ii]);.#i
20df0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
20e00 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  G.      if( ii )
20e10 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
20e20 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
20e30 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66  Mem[ii]);.#endif
20e40 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b  .    }.    pIdxK
20e50 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65  ey = &r;.  }else
20e60 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  {.    pIdxKey = 
20e70 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
20e80 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
20e90 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79          pC->pKey
20ea0 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20  Info, aTempRec, 
20eb0 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
20ec0 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a  , &pFree.    );.
20ed0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
20ee0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
20ef0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
20f00 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
20f10 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61  Blob );.    Expa
20f20 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
20f30 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
20f40 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
20f50 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
20f60 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
20f70 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65  y);.  }.  pIdxKe
20f80 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20  y->default_rc = 
20f90 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20  0;.  takeJump = 
20fa0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  0;.  if( pOp->op
20fb0 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
20fc0 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
20fd0 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
20fe0 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
20ff0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
21000 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
21010 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
21020 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
21030 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
21040 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
21050 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
21060 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64  for(ii=0; ii<pId
21070 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69  xKey->nField; ii
21080 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
21090 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d  IdxKey->aMem[ii]
210a0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
210b0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b  l ){.        tak
210c0 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20  eJump = 1;.     
210d0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
210e0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  }.    }.  }.  rc
210f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21100 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21110 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49  ->uc.pCursor, pI
21120 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
21130 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  s);.  sqlite3DbF
21140 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a  ree(db, pFree);.
21150 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
21160 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  _OK ){.    goto 
21170 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21180 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  or;.  }.  pC->se
21190 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
211a0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
211b0 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
211c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
211d0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
211e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
211f0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
21200 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21210 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
21220 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
21230 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
21240 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
21250 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
21260 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
21270 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
21280 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
21290 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
212a0 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c  Taken(takeJump||
212b0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30  alreadyExists==0
212c0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b  ,2);.    if( tak
212d0 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64  eJump || !alread
212e0 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
212f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
21300 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21310 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20  code: SeekRowid 
21320 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
21330 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
21340 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
21350 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
21360 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
21370 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
21380 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
21390 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20  r.** keys).  If 
213a0 72 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73  register P3 does
213b0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
213c0 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31  integer or if P1
213d0 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e   does not.** con
213e0 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
213f0 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
21400 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
21410 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72  y to P2.  .** Or
21420 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
21430 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ise an SQLITE_CO
21440 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20  RRUPT error. If 
21450 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a  P1 does contain.
21460 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  ** a record with
21470 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
21480 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
21490 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
214a0 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
214b0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
214c0 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
214d0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
214e0 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  he OP_NotExists 
214f0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
21500 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
21510 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f  on, but with OP_
21520 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65  NotExists.** the
21530 20 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73   P3 register mus
21540 74 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20  t be guaranteed 
21550 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  to contain an in
21560 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69  teger value.  Wi
21570 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  th this.** opcod
21580 65 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d  e, register P3 m
21590 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  ight not contain
215a0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
215b0 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75  ** The OP_NotFou
215c0 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  nd opcode perfor
215d0 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
215e0 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62  ation on index b
215f0 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61  trees.** (with a
21600 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76  rbitrary multi-v
21610 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a  alue keys)..**.*
21620 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
21630 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
21640 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
21650 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64   it cannot be ad
21660 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74  vanced.** in eit
21670 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
21680 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21690 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
216a0 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a  v opcodes will.*
216b0 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f  * not work follo
216c0 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  wing this opcode
216d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
216e0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
216f0 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53  d, NoConflict, S
21700 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f  eekRowid.*/./* O
21710 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
21720 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
21730 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
21740 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
21750 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
21760 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
21770 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
21780 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
21790 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33  er.** keys).  P3
217a0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72   is an integer r
217b0 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65  owid.  If P1 doe
217c0 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  s not contain a 
217d0 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72  record with.** r
217e0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
217f0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21800 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20   P2.  Or, if P2 
21810 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a  is 0, raise an.*
21820 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  * SQLITE_CORRUPT
21830 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f   error. If P1 do
21840 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  es contain a rec
21850 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
21860 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65  3 then .** leave
21870 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
21880 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
21890 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ord and fall thr
218a0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
218b0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
218c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65  .**.** The OP_Se
218d0 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70  ekRowid opcode p
218e0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
218f0 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61   operation but a
21900 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a  lso allows the.*
21910 2a 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f  * P3 register to
21920 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69   contain a non-i
21930 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e  nteger value, in
21940 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
21950 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79  jump is.** alway
21960 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f  s taken.  This o
21970 70 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74  pcode requires t
21980 68 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f  hat P3 always co
21990 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
219a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
219b0 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
219c0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
219d0 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
219e0 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
219f0 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
21a00 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
21a10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
21a20 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
21a30 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21a40 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21a50 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69  be advanced.** i
21a60 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
21a70 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
21a80 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
21a90 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77  d Prev opcodes w
21aa0 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20  ill.** not work 
21ab0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f  following this o
21ac0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
21ad0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
21ae0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
21af0 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f  ct, SeekRowid.*/
21b00 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77  .case OP_SeekRow
21b10 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  id: {        /* 
21b20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
21b30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21b40 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21b50 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75  ;.  int res;.  u
21b60 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33  64 iKey;..  pIn3
21b70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21b80 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
21b90 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
21ba0 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
21bb0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53  Affinity(pIn3, S
21bc0 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
21bd0 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
21be0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
21bf0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
21c00 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
21c10 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  p2;.  }.  /* Fal
21c20 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
21c30 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63  P_NotExists */.c
21c40 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
21c50 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
21c60 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e  mp, in3 */.  pIn
21c70 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
21c80 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
21c90 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
21ca0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
21cb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21cc0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21cd0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21ce0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21cf0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21d00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21d10 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
21d20 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  Op = 0;.#endif. 
21d30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
21d40 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
21d50 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
21d60 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
21d70 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
21d80 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
21d90 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
21da0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b  .  res = 0;.  iK
21db0 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  ey = pIn3->u.i;.
21dc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21dd0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21de0 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
21df0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73  , 0, &res);.  as
21e00 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
21e10 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b  _OK || res==0 );
21e20 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
21e30 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
21e40 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
21e50 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e */.  pC->nullR
21e60 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
21e70 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21e80 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
21e90 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21ea0 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
21eb0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
21ec0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
21ed0 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65   = res;.  if( re
21ee0 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  s!=0 ){.    asse
21ef0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
21f00 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  K );.    if( pOp
21f10 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
21f20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
21f30 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  RUPT_BKPT;.    }
21f40 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f  else{.      goto
21f50 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
21f60 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
21f70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
21f80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
21f90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21fa0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
21fb0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
21fc0 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
21fd0 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
21fe0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
21ff0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
22000 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
22010 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
22020 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
22030 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
22040 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
22050 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
22060 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
22070 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
22080 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
22090 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
220a0 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
220b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
220c0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
220d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
220e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
220f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
22100 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
22110 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
22120 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
22130 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
22140 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75  PE_VTAB );.  pOu
22150 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
22160 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
22170 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
22180 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
22190 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
221a0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
221b0 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
221c0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
221d0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
221e0 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
221f0 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
22200 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
22210 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
22220 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
22230 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
22240 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
22250 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
22260 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
22270 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
22280 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
22290 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
222a0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
222b0 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
222c0 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
222d0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
222e0 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
222f0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
22300 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
22310 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
22320 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
22330 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
22340 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
22350 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
22360 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
22370 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
22380 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
22390 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
223a0 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
223b0 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
223c0 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
223d0 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
223e0 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
223f0 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
22400 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
22410 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
22420 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
22430 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
22440 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
22450 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
22460 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
22470 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
22480 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
22490 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
224a0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
224b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
224c0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
224d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
224e0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
224f0 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
22500 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
22510 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
22520 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
22530 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
22540 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
22550 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
22560 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
22570 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
22580 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
22590 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
225a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
225b0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
225c0 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
225d0 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
225e0 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
225f0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
22600 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
22610 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
22620 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f  .  res = 0;.  pO
22630 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
22640 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
22650 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22660 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22670 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22680 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22690 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
226a0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
226b0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
226c0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
226d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
226e0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
226f0 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e    {.    /* The n
22700 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
22710 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
22720 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
22730 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
22740 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
22750 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
22760 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
22770 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
22780 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
22790 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
227a0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
227b0 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
227c0 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
227d0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
227e0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
227f0 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
22800 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
22810 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
22820 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
22830 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
22840 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
22850 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
22860 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
22870 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
22880 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
22890 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
228a0 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
228b0 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
228c0 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
228d0 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
228e0 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
228f0 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
22900 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
22910 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
22920 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
22930 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
22940 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
22950 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
22960 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
22970 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22980 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
22990 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
229a0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
229b0 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
229c0 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
229d0 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
229e0 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
229f0 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
22a00 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
22a10 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
22a20 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
22a30 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
22a40 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
22a50 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
22a60 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
22a70 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
22a80 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
22a90 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
22aa0 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
22ab0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
22ac0 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
22ad0 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
22ae0 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
22af0 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
22b00 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
22b10 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
22b20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22b30 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70  reeLast(pC->uc.p
22b40 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
22b50 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
22b60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22b70 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22b80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22b90 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
22ba0 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
22bb0 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
22bc0 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
22bd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22be0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
22bf0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
22c00 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  alid(pC->uc.pCur
22c10 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
22c20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  v = sqlite3Btree
22c30 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75  IntegerKey(pC->u
22c40 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
22c50 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52      if( v>=MAX_R
22c60 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
22c70 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
22c80 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
22c90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
22ca0 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50     v++;   /* IMP
22cb0 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20  : R-29538-34987 
22cc0 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
22cd0 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e     }.    }..#ifn
22ce0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22cf0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
22d00 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
22d10 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74  .      /* Assert
22d20 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
22d30 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
22d40 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
22d50 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
22d60 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
22d70 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  me ){.        fo
22d80 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
22d90 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
22da0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
22db0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
22dc0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
22dd0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
22de0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
22df0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
22e00 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61  t( pOp->p3<=pFra
22e10 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  me->nMem );.    
22e20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
22e30 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
22e40 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  ];.      }else{.
22e50 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
22e60 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
22e70 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
22e80 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
22e90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
22ea0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
22eb0 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
22ec0 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
22ed0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
22ee0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
22ef0 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
22f00 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
22f10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
22f20 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
22f30 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
22f40 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
22f50 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
22f60 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
22f70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
22f80 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
22f90 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
22fa0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
22fb0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
22fc0 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
22fd0 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
22fe0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
22ff0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
23000 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
23010 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
23020 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
23030 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23040 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23050 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
23060 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
23070 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
23080 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
23090 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
230a0 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
230b0 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
230c0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
230d0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
230e0 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
230f0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
23100 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
23110 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
23120 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
23130 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
23140 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
23150 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
23160 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
23170 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
23180 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
23190 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
231a0 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
231b0 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
231c0 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
231d0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
231e0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
231f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
23200 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
23210 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
23220 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
23230 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23250 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
23260 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
23270 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
23280 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
23290 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
232a0 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
232b0 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
232c0 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
232d0 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
232e0 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
232f0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
23300 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
23310 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
23320 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
23330 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
23340 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
23380 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
23390 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
233a0 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
233b0 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
233c0 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20  nt<100));.      
233d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
233e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
233f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d  ;.      if( res=
23400 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
23410 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
23420 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
23430 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
23440 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23450 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23460 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
23470 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
23480 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
23490 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
234a0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
234b0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
234c0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
234d0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
234e0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
234f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23500 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
23510 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
23520 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
23530 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
23540 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
23550 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
23560 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
23570 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
23580 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
23590 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
235a0 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
235b0 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
235c0 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
235d0 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
235e0 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
235f0 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
23600 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
23610 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
23620 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
23630 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
23640 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
23650 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
23660 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
23670 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
23680 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
23690 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
236a0 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
236b0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
236c0 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
236d0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
236e0 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
236f0 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
23700 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
23710 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
23720 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
23730 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
23740 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
23750 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
23760 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
23770 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
23780 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
23790 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
237a0 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
237b0 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
237c0 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
237d0 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
237e0 73 20 6f 72 20 4f 50 5f 53 65 65 6b 52 6f 77 69  s or OP_SeekRowi
237f0 64 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  d) was a success
23800 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 69 73 0a 2a  ,.** then this.*
23810 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  * operation will
23820 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
23830 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72  find the appropr
23840 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20  iate row before 
23850 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73  doing.** the ins
23860 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73  ert but will ins
23870 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74  tead overwrite t
23880 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20  he row that the 
23890 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72  cursor is.** cur
238a0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
238b0 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c  to.  Presumably,
238c0 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f   the prior OP_No
238d0 74 45 78 69 73 74 73 20 6f 72 0a 2a 2a 20 4f 50  tExists or.** OP
238e0 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
238f0 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
23900 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
23910 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
23920 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
23930 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
23940 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
23950 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
23960 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
23970 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
23980 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
23990 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
239a0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
239b0 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
239c0 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
239d0 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
239e0 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
239f0 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
23a00 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
23a10 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
23a20 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
23a30 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
23a40 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
23a50 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
23a60 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
23a70 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
23a80 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  a Table structur
23a90 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c  e, or may be NUL
23aa0 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20  L. If it is .** 
23ab0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
23ac0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28  he update-hook (
23ad0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
23ae0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
23af0 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e  ked .** followin
23b00 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
23b10 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
23b20 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
23b30 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
23b40 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
23b50 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
23b60 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
23b70 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
23b80 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
23b90 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
23ba0 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
23bb0 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
23bc0 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
23bd0 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
23be0 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
23bf0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
23c00 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
23c10 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
23c20 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
23c30 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
23c40 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
23c50 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
23c60 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
23c70 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
23c80 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
23c90 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
23ca0 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
23cb0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
23cc0 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
23cd0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
23ce0 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
23cf0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
23d00 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
23d10 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
23d20 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
23d30 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
23d40 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
23d50 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
23d60 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
23d70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
23d80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
23d90 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
23da0 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
23db0 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
23dc0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
23dd0 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
23de0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
23df0 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
23e00 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
23e10 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
23e20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
23e30 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ord */.  VdbeCur
23e40 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
23e50 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
23e60 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
23e70 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
23e80 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
23e90 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
23ea0 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
23eb0 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
23ec0 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
23ed0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
23ee0 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
23ef0 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
23f00 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54  date hook */.  T
23f10 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
23f20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74   /* Table struct
23f30 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70  ure - used by up
23f40 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64  date and pre-upd
23f50 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69  ate hooks */.  i
23f60 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
23f70 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
23f80 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
23f90 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
23fa0 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20  ITE_INSERT */.  
23fb0 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20  BtreePayload x; 
23fc0 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20    /* Payload to 
23fd0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a  be inserted */..
23fe0 20 20 6f 70 20 3d 20 30 3b 0a 20 20 70 44 61 74    op = 0;.  pDat
23ff0 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
24000 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
24010 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24020 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
24030 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
24040 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
24050 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24060 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24070 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24080 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
24090 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
240a0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
240b0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
240c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
240d0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
240e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
240f0 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c  type==P4_TABLE |
24100 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50  | pOp->p4type>=P
24110 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45  4_STATIC );.  RE
24120 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
24130 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
24140 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
24150 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
24160 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
24170 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
24180 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
24190 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
241a0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
241b0 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
241c0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
241d0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
241e0 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
241f0 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
24200 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
24210 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
24220 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
24230 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33  x.nKey = pOp->p3
24240 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
24250 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
24260 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
24270 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
24280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24290 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
242a0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
242b0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
242c0 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
242d0 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
242e0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
242f0 20 61 73 73 65 72 74 28 20 48 61 73 52 6f 77 69   assert( HasRowi
24300 64 28 70 54 61 62 29 20 29 3b 0a 20 20 20 20 6f  d(pTab) );.    o
24310 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
24320 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
24330 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
24340 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
24350 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
24360 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74  pTab = 0; /* Not
24370 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
24380 65 20 61 20 63 6f 6d 69 6c 65 72 20 77 61 72 6e  e a comiler warn
24390 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20  ing. */.    zDb 
243a0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
243b0 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
243c0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
243d0 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
243e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
243f0 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
24400 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
24410 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69  e-update hook, i
24420 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64  f any */.  if( d
24430 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c  b->xPreUpdateCal
24440 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f 70  lback .   && pOp
24450 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
24460 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70 2d 3e  LE.   && !(pOp->
24470 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
24480 44 41 54 45 29 0a 20 20 29 7b 0a 20 20 20 20 73  DATE).  ){.    s
24490 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
244a0 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53  ateHook(p, pC, S
244b0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44  QLITE_INSERT, zD
244c0 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c  b, pTab, x.nKey,
244d0 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23   pOp->p2);.  }.#
244e0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
244f0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
24500 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
24510 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
24520 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
24530 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
24540 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
24550 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 69  id = x.nKey;.  i
24560 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
24570 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
24580 20 20 78 2e 70 44 61 74 61 20 3d 20 30 3b 0a 20    x.pData = 0;. 
24590 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 30 3b 0a     x.nData = 0;.
245a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
245b0 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
245c0 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
245d0 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20 20 78 2e  M_Str) );.    x.
245e0 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a  pData = pData->z
245f0 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20  ;.    x.nData = 
24600 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d 0a 20 20  pData->n;.  }.  
24610 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
24620 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24630 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
24640 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
24650 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
24660 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
24670 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65  ero ){.    x.nZe
24680 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
24690 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
246a0 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20    x.nZero = 0;. 
246b0 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b   }.  x.pKey = 0;
246c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
246d0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
246e0 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
24710 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
24720 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c  D)!=0, seekResul
24730 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66  t.  );.  pC->def
24740 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
24750 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24760 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24770 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
24780 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
24790 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
247a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
247b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
247c0 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  r;.  if( db->xUp
247d0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
247e0 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55  op ){.    db->xU
247f0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
24800 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
24810 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
24820 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
24830 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24840 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
24850 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24860 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
24870 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
24880 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
24890 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
248a0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
248b0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
248c0 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
248d0 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
248e0 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
248f0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
24900 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
24910 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
24920 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
24930 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
24940 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
24950 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
24960 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
24970 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
24980 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
24990 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
249a0 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
249b0 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
249c0 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
249d0 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
249e0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
249f0 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
24a00 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
24a10 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
24a20 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
24a30 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
24a40 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
24a50 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
24a60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24a70 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
24a80 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
24a90 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
24aa0 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
24ab0 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
24ac0 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
24ad0 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
24ae0 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
24af0 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
24b00 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
24b10 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
24b20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
24b30 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
24b40 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
24b50 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
24b60 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
24b70 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
24b80 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
24b90 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
24ba0 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
24bb0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
24bc0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
24bd0 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
24be0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
24bf0 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
24c00 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
24c10 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
24c20 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
24c30 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
24c40 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
24c50 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
24c60 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
24c70 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
24c80 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
24c90 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
24ca0 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75   to a Table stru
24cb0 74 75 72 65 2e 20 49 6e 20 74 68 69 73 20 63 61  ture. In this ca
24cc0 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68  se either .** th
24cd0 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d  e update or pre-
24ce0 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20  update hook, or 
24cf0 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76  both, may be inv
24d00 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75 72  oked. The P1 cur
24d10 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  sor must.** have
24d20 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
24d30 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
24d40 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
24d50 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
24d60 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73   in .** this cas
24d70 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c  e. Specifically,
24d80 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69   if one is confi
24d90 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75  gured, the pre-u
24da0 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a  pdate hook is .*
24db0 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20  * invoked if P4 
24dc0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65  is not NULL. The
24dd0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20   update-hook is 
24de0 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69  invoked if one i
24df0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a  s configured, .*
24e00 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  * P4 is not NULL
24e10 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47  , and the OPFLAG
24e20 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73  _NCHANGE flag is
24e30 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a   set in P2..**.*
24e40 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24e50 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
24e60 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e   set in P2, then
24e70 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
24e80 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74   address.** of t
24e90 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
24ea0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
24eb0 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
24ec0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
24ed0 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20   will.** be set 
24ee0 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74 65  to by the update
24ef0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
24f00 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
24f10 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74  sor *pC;.  const
24f20 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61   char *zDb;.  Ta
24f30 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74  ble *pTab;.  int
24f40 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66   opflags;..  opf
24f50 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  lags = pOp->p2;.
24f60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24f70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24f80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24f90 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24fa0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24fb0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
24fc0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
24fd0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
24fe0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24ff0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
25000 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25010 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
25020 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  =0 );..#ifdef SQ
25030 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
25040 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
25050 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77  _TABLE && HasRow
25060 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29  id(pOp->p4.pTab)
25070 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   && pOp->p5==0 )
25080 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20 69  {.    /* If p5 i
25090 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65 6b  s zero, the seek
250a0 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20   operation that 
250b0 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
250c0 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20  ursor prior to. 
250d0 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20     ** OP_Delete 
250e0 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20 73  will have also s
250f0 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74  et the pC->movet
25100 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f  oTarget field to
25110 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20 20   the rowid of.  
25120 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68 61    ** the row tha
25130 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74  t is being delet
25140 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b  ed */.    i64 iK
25150 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ey = sqlite3Btre
25160 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
25170 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
25180 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76   assert( pC->mov
25190 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
251a0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
251b0 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
251c0 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70  e-hook or pre-up
251d0 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
251e0 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a  e invoked, set z
251f0 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e  Db to.  ** the n
25200 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f  ame of the db to
25210 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20   pass as to it. 
25220 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70  Also set local p
25230 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20  Tab to a copy.  
25240 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46  ** of p4.pTab. F
25250 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73  inally, if p5 is
25260 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e   true, indicatin
25270 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72 73  g that this curs
25280 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74  or was.  ** last
25290 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e   moved with OP_N
252a0 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20  ext or OP_Prev, 
252b0 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46  not Seek or NotF
252c0 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20  ound, set .  ** 
252d0 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74  VdbeCursor.movet
252e0 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20 63  oTarget to the c
252f0 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a  urrent rowid.  *
25300 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  /.  if( pOp->p4t
25310 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
25320 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
25330 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
25340 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
25350 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
25360 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b  p->p4.pTab!=0 );
25370 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
25380 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
25390 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
253a0 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
253b0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
253c0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
253d0 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73  ON)!=0 && pC->is
253e0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70  Table ){.      p
253f0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
25400 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
25410 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
25420 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
25430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62    }else{.    zDb
25440 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e   = 0;   /* Not n
25450 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
25460 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
25470 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20  ng. */.    pTab 
25480 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
25490 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
254a0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
254b0 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
254c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
254d0 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
254e0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
254f0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e-update-hook if
25500 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
25510 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
25520 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
25530 70 2d 3e 70 34 2e 70 54 61 62 20 26 26 20 48 61  p->p4.pTab && Ha
25540 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
25550 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70      assert( !(op
25560 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
25570 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d 65  SUPDATE) || (aMe
25580 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73  m[pOp->p3].flags
25590 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a 20   & MEM_Int) );. 
255a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
255b0 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70  eUpdateHook(p, p
255c0 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c  C,.        (opfl
255d0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
255e0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
255f0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
25600 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20  DELETE, .       
25610 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e   zDb, pTab, pC->
25620 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20  movetoTarget,.  
25630 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20        pOp->p3.  
25640 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f    );.  }.  if( o
25650 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
25660 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a  ISNOOP ) break;.
25670 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e  #endif. .  /* On
25680 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61  ly flags that ca
25690 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56  n be set are SAV
256a0 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55  EPOISTION and AU
256b0 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73  XDELETE */ .  as
256c0 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
256d0 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   ~(OPFLAG_SAVEPO
256e0 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55  SITION|OPFLAG_AU
256f0 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a  XDELETE))==0 );.
25700 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
25710 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42  _SAVEPOSITION==B
25720 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
25730 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  N );.  assert( O
25740 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d  PFLAG_AUXDELETE=
25750 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45  =BTREE_AUXDELETE
25760 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
25770 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
25780 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20  ->pFrame==0 ){. 
25790 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68     if( pC->isEph
257a0 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20  emeral==0.      
257b0 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20    && (pOp->p5 & 
257c0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
257d0 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20  )==0.        && 
257e0 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50  (pC->wrFlag & OP
257f0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d  FLAG_FORDELETE)=
25800 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
25810 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b    nExtraDelete++
25820 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
25830 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
25840 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
25850 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d    nExtraDelete--
25860 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
25870 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  if..  rc = sqlit
25880 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
25890 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
258a0 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61  p->p5);.  pC->ca
258b0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
258c0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
258d0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
258e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
258f0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
25900 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
25910 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
25920 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
25930 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
25940 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
25950 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
25960 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73  eCallback && Has
25970 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
25980 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65       db->xUpdate
25990 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
259a0 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
259b0 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61  DELETE, zDb, pTa
259c0 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
259d0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
259e0 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73  rget);.      ass
259f0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
25a00 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
25a10 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
25a20 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
25a30 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
25a40 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
25a50 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
25a60 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
25a70 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
25a80 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
25a90 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
25aa0 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
25ab0 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
25ac0 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
25ad0 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
25ae0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
25af0 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
25b00 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
25b10 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
25b20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
25b30 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
25b40 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
25b50 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
25b60 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
25b70 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
25b80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
25b90 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
25ba0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
25bb0 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
25bc0 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67  trim(r[P3],P4) g
25bd0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  oto P2.**.** P1 
25be0 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
25bf0 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
25c00 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20  tion compares a 
25c10 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a  prefix of the.**
25c20 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
25c30 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
25c40 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
25c50 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
25c60 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
25c70 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
25c80 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20  oints to.  Only 
25c90 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65  the first P4 fie
25ca0 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20  lds.** of r[P3] 
25cb0 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72  and the sorter r
25cc0 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72  ecord are compar
25cd0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  ed..**.** If eit
25ce0 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f  her P3 or the so
25cf0 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  rter contains a 
25d00 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74  NULL in one of t
25d10 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74  heir significant
25d20 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20  .** fields (not 
25d30 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20  counting the P4 
25d40 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
25d50 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f  d which are igno
25d60 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65  red) then.** the
25d70 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
25d80 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75  ssumed to be equ
25d90 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  al..**.** Fall t
25da0 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69  hrough to next i
25db0 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68  nstruction if th
25dc0 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f  e two records co
25dd0 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a  mpare equal to.*
25de0 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a  * each other.  J
25df0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
25e00 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
25e10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
25e20 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
25e30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25e40 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
25e50 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d  nKeyCol;..  pC =
25e60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25e70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
25e80 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
25e90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25ea0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
25eb0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
25ec0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79  pOp->p3];.  nKey
25ed0 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Col = pOp->p4.i;
25ee0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
25ef0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
25f00 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
25f10 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26  pIn3, nKeyCol, &
25f20 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  res);.  VdbeBran
25f30 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
25f40 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
25f50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25f60 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
25f70 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
25f80 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  p2;.  break;.};.
25f90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
25fa0 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20  erData P1 P2 P3 
25fb0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
25fc0 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
25fd0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
25fe0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72  ister P2 the cur
25ff0 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61  rent sorter data
26000 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73   for sorter curs
26010 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63  or P1..** Then c
26020 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  lear the column 
26030 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20  header cache on 
26040 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  cursor P3..**.**
26050 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
26060 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20  normally use to 
26070 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75  move a record ou
26080 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20  t of the sorter 
26090 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65  and into.** a re
260a0 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74  gister that is t
260b0 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20  he source for a 
260c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
260d0 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e  sor created usin
260e0 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e  g.** OpenPseudo.
260f0 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61    That pseudo-ta
26100 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68  ble cursor is th
26110 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64  e one that is id
26120 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70  entified by.** p
26130 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c  arameter P3.  Cl
26140 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f  earing the P3 co
26150 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61  lumn cache as pa
26160 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  rt of this opcod
26170 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72  e saves.** us fr
26180 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73  om having to iss
26190 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75  ue a separate Nu
261a0 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f  llRow instructio
261b0 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20  n to clear that 
261c0 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cache..*/.case O
261d0 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a  P_SorterData: {.
261e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
261f0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
26200 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
26210 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26220 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26230 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
26240 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
26250 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
26260 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65  C, pOut);.  asse
26270 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
26280 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67  K || (pOut->flag
26290 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  s & MEM_Blob) );
262a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
262b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
262c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
262d0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
262e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
262f0 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r;.  p->apCsr[pO
26300 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
26310 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26320 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
26330 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
26340 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
26350 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
26360 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
26370 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
26380 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
26390 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
263a0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
263b0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
263c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
263d0 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
263e0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
263f0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
26400 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
26410 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
26420 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
26430 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
26440 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
26450 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
26460 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
26470 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
26480 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
26490 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
264a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
264b0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
264c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
264d0 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
264e0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
264f0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
26500 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
26510 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
26520 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
26530 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
26540 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
26550 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
26560 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
26570 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
26580 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
26590 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
265a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
265b0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
265c0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
265d0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
265e0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
265f0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
26600 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
26610 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
26620 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
26630 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
26640 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
26650 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
26660 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  2 n;..  pOut = &
26670 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26680 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
26690 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
266a0 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
266b0 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
266c0 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
266d0 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
266e0 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
266f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26700 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26710 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26720 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26740 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26750 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
26760 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
26770 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
26780 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
26790 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
267a0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
267b0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
267c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
267d0 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
267e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
267f0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
26800 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
26810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26820 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
26830 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
26840 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  c.pCursor;..  /*
26850 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
26860 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
26870 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
26880 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
26890 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b   or.  ** OP_Seek
268a0 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69  Rowid or OP_Rewi
268b0 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
268c0 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
268d0 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a  nstructions.  **
268e0 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
268f0 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
26900 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20  r..  ** If this 
26910 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61  where not the ca
26920 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f  se, on of the fo
26930 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29  llowing assert()
26940 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69  s.  ** would fai
26950 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20  l.  Should this 
26960 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63  ever change (bec
26970 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20  ause of changes 
26980 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a  in the code.  **
26990 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e   generator) then
269a0 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62   the fix would b
269b0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61  e to insert a ca
269c0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
269d0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
269e0 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  to()..  */.  ass
269f0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
26a00 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
26a10 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
26a20 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
26a30 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20  d(pCrsr) );.#if 
26a40 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72  0  /* Not requir
26a50 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72  ed due to the pr
26a60 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74  evious to assert
26a70 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  () statements */
26a80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
26a90 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
26aa0 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  pC);.  if( rc!=S
26ab0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
26ac0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26ad0 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20  or;.#endif..  n 
26ae0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
26af0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
26b00 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64  ;.  if( n>(u32)d
26b10 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
26b20 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
26b30 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
26b40 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61  ig;.  }.  testca
26b50 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66  se( n==0 );.  if
26b60 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
26b70 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
26b80 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20  Out, MAX(n,32)) 
26b90 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
26ba0 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
26bb0 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
26bc0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
26bd0 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
26be0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
26bf0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26c00 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
26c10 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
26c20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
26c30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26c40 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
26c50 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
26c60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
26c70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26c80 72 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  r;.  pOut->enc =
26c90 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
26ca0 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
26cb0 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
26cc0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
26cd0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
26ce0 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
26cf0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
26d00 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
26d10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26d20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
26d30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26d40 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
26d50 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
26d60 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
26d70 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
26d80 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
26d90 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
26da0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
26db0 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
26dc0 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
26dd0 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
26de0 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
26df0 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
26e00 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
26e10 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
26e20 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
26e30 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
26e40 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
26e50 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
26e60 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
26e70 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
26e80 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26ea0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
26eb0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
26ec0 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
26ed0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
26ee0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
26ef0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f   *pModule;..  pO
26f00 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
26f10 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
26f20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26f30 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26f40 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26f50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26f60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26f70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
26f80 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
26f90 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c  CURTYPE_PSEUDO |
26fa0 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
26fb0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
26fc0 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
26fd0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
26fe0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
26ff0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
27000 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
27010 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
27020 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
27030 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27040 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
27050 65 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79  e if( pC->eCurTy
27060 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
27070 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27080 70 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20  pC->uc.pVCur!=0 
27090 29 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  );.    pVtab = p
270a0 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  C->uc.pVCur->pVt
270b0 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
270c0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
270d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
270e0 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
270f0 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
27100 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63  e->xRowid(pC->uc
27110 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20  .pVCur, &v);.   
27120 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
27130 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
27140 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  b);.    if( rc )
27150 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27160 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
27170 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
27180 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
27190 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
271a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
271b0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
271c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
271d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
271e0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
271f0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
27200 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
27210 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27220 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27230 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
27240 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
27250 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27260 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
27270 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20  ak;.    }.    v 
27280 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27290 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
272a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
272b0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
272c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
272d0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
272e0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
272f0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
27300 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
27310 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
27320 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
27330 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
27340 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
27350 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
27360 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
27370 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
27380 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
27390 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
273a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
273b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
273c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
273d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
273e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
273f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27400 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
27410 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
27420 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
27430 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72  ;.  if( pC->eCur
27440 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27450 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REE ){.    asser
27460 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27470 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  r!=0 );.    sqli
27480 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
27490 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
274a0 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
274b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
274c0 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a 20  Last P1 P2 P3 * 
274d0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
274e0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
274f0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50  d or Column or P
27500 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  rev instruction 
27510 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
27520 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
27530 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
27540 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
27550 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
27560 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
27570 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
27580 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
27590 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
275a0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
275b0 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
275c0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
275d0 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
275e0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
275f0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
27600 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
27610 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
27620 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
27630 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
27640 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
27650 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
27660 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
27670 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
27680 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
27690 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
276a0 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
276b0 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Next..*/.case O
276c0 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
276d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
276e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
276f0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
27700 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
27710 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27720 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27730 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27740 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27750 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27760 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27770 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27780 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27790 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
277a0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  c.pCursor;.  res
277b0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
277c0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63  pCrsr!=0 );.  rc
277d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
277e0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
277f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
27800 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
27810 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
27820 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
27830 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
27840 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  TALE;.  pC->seek
27850 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33  Result = pOp->p3
27860 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
27870 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
27880 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65  Op = OP_Last;.#e
27890 6e 64 69 66 0a 20 20 69 66 28 20 72 63 20 29 20  ndif.  if( rc ) 
278a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
278b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
278c0 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
278d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
278e0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
278f0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
27900 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
27910 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
27920 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
27930 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
27940 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
27950 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
27960 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
27970 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
27980 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
27990 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
279a0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
279b0 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
279c0 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
279d0 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
279e0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
279f0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
27a00 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
27a10 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
27a20 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
27a30 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
27a40 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
27a50 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
27a60 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
27a70 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
27a80 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
27a90 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
27aa0 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
27ab0 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
27ac0 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
27ad0 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
27ae0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
27af0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
27b00 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
27b10 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
27b20 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
27b30 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
27b40 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
27b50 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
27b60 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
27b70 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
27b80 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
27b90 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
27ba0 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
27bb0 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
27bc0 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
27bd0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
27be0 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
27bf0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
27c00 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
27c10 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
27c20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
27c30 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
27c40 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
27c50 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
27c60 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
27c70 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
27c80 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
27c90 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
27ca0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
27cb0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
27cc0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
27cd0 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
27ce0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
27cf0 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
27d00 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
27d10 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
27d20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27d30 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
27d40 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
27d50 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
27d60 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
27d70 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
27d80 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
27d90 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
27da0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
27db0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
27dc0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
27dd0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
27de0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
27df0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
27e00 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
27e10 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
27e20 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
27e30 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
27e40 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
27e50 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
27e60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27e70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27e80 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27e90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27ea0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27eb0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
27ec0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
27ed0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
27ee0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
27ef0 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
27f00 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
27f10 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
27f20 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
27f30 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
27f40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
27f50 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
27f60 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
27f70 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27f80 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27f90 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27fa0 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
27fb0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  c.pCursor;.    a
27fc0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
27fd0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27fe0 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
27ff0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
28000 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
28010 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
28020 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
28030 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
28040 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28050 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28060 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
28070 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
28080 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
28090 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
280a0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
280b0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
280c0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
280d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
280e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
280f0 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
28100 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
28110 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
28120 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
28130 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
28140 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
28150 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
28160 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
28170 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
28180 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
28190 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
281a0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
281b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
281c0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
281d0 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
281e0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
281f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
28200 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
28210 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
28220 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
28230 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
28240 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
28250 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
28260 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
28270 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
28280 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
28290 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
282a0 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
282b0 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
282c0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
282d0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
282e0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
282f0 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
28300 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
28310 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
28320 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
28330 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
28340 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
28350 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
28360 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
28370 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
28380 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
28390 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
283a0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
283b0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
283c0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
283d0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
283e0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
283f0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
28400 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
28410 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
28420 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
28430 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
28440 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
28450 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
28460 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
28470 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
28480 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
28490 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
284a0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
284b0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
284c0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
284d0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
284e0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
284f0 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
28500 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
28510 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
28520 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
28530 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
28540 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
28550 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
28560 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
28570 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65  t like Next exce
28580 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
28590 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
285a0 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
285b0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
285c0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
285d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
285e0 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
285f0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
28600 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
28610 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
28620 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
28630 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
28640 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
28650 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
28660 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
28670 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
28680 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
28690 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
286a0 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
286b0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
286c0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
286d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
286e0 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
286f0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
28700 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
28710 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
28720 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
28730 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
28740 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
28750 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
28760 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
28770 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
28780 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
28790 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
287a0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
287b0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
287c0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
287d0 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
287e0 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
287f0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
28800 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
28810 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
28820 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
28830 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
28840 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
28850 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
28860 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
28870 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
28880 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
28890 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
288a0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
288b0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
288c0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
288d0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
288e0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
288f0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
28900 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
28910 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
28920 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
28930 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
28940 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
28950 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
28960 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
28970 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
28980 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
28990 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
289a0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
289b0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
289c0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
289d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
289e0 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
289f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
28a00 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
28a10 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76  s just like Prev
28a20 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
28a30 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
28a40 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
28a50 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
28a60 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
28a70 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
28a80 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
28a90 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
28aa0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
28ab0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28ac0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
28ad0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
28ae0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
28af0 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20  eSorterNext(db, 
28b00 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74  pC, &res);.  got
28b10 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
28b20 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a  e OP_PrevIfOpen:
28b30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
28b40 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65  ase OP_NextIfOpe
28b50 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
28b60 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
28b70 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72  pOp->p1]==0 ) br
28b80 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
28b90 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f  hrough */.case O
28ba0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
28bb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
28bc0 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
28bd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
28be0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
28bf0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
28c00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
28c10 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
28c20 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
28c30 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
28c40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28c50 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70  ;.  res = pOp->p
28c60 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  3;.  assert( pC!
28c70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28c80 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
28c90 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
28ca0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
28cb0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
28cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d  ;.  assert( res=
28cd0 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26  =0 || (res==1 &&
28ce0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29   pC->isTable==0)
28cf0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
28d00 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65  res==1 );.  asse
28d10 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
28d20 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
28d30 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
28d40 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
28d50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28d60 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
28d70 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
28d80 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
28d90 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20  eePrevious );.  
28da0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
28db0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
28dc0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
28dd0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
28de0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
28df0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
28e00 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
28e10 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
28e20 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
28e30 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20  eePrevious);..  
28e40 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  /* The Next opco
28e50 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
28e60 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65  after SeekGT, Se
28e70 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64  ekGE, and Rewind
28e80 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20  ..  ** The Prev 
28e90 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
28ea0 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54  sed after SeekLT
28eb0 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61  , SeekLE, and La
28ec0 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  st. */.  assert(
28ed0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
28ee0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Next || pOp->op
28ef0 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
28f00 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
28f10 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
28f20 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
28f30 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
28f40 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
28f50 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
28f60 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
28f70 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28  ound);.  assert(
28f80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
28f90 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Prev || pOp->op
28fa0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
28fb0 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
28fc0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
28fd0 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kLT || pC->seekO
28fe0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20  p==OP_SeekLE.   
28ff0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
29000 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20  p==OP_Last );.. 
29010 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
29020 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43  dvance(pC->uc.pC
29030 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65  ursor, &res);.ne
29040 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63  xt_tail:.  pC->c
29050 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29060 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65  HE_STALE;.  Vdbe
29070 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d  BranchTaken(res=
29080 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  =0,2);.  if( rc 
29090 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
290a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
290b0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70   res==0 ){.    p
290c0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
290d0 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b      p->aCounter[
290e0 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64  pOp->p5]++;.#ifd
290f0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
29100 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63     sqlite3_searc
29110 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
29120 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  f.    goto jump_
29130 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
29140 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
29150 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e   }else{.    pC->
29160 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d  nullRow = 1;.  }
29170 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
29180 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
29190 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
291a0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20  sert P1 P2 P3 * 
291b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
291c0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
291d0 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
291e0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
291f0 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
29200 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
29210 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
29220 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
29230 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
29240 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
29250 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
29260 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
29270 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
29280 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
29290 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
292a0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
292b0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
292c0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
292d0 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  append..**.** If
292e0 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
292f0 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73  AG_NCHANGE bit s
29300 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61  et, then the cha
29310 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a  nge counter is.*
29320 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  * incremented by
29330 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
29340 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  n.  If the OPFLA
29350 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73  G_NCHANGE bit is
29360 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20   clear,.** then 
29370 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
29380 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  er is unchanged.
29390 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
293a0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
293b0 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65  EEKRESULT bit se
293c0 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  t, then the curs
293d0 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  or must have.** 
293e0 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b  just done a seek
293f0 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65   to the spot whe
29400 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79  re the new entry
29410 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74   is to be insert
29420 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67  ed..** This flag
29430 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e   avoids doing an
29440 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a   extra seek..**.
29450 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
29460 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
29470 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
29480 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
29490 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
294a0 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
294b0 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  rt..*/.case OP_S
294c0 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20  orterInsert:    
294d0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73     /* in2 */.cas
294e0 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
294f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
29500 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
29510 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c  *pC;.  BtreePayl
29520 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74  oad x;..  assert
29530 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29540 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29550 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29560 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29570 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29580 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
29590 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
295a0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
295b0 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
295c0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
295d0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
295e0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
295f0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20  M_Blob );.  if( 
29600 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
29610 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
29620 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
29630 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
29640 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c  =CURTYPE_BTREE |
29650 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
29660 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
29670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29680 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
29690 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
296a0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20  pIn2);.  if( rc 
296b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
296c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
296d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
296e0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b  _SorterInsert ){
296f0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29700 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
29710 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65  (pC, pIn2);.  }e
29720 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  lse{.    x.nKey 
29730 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78  = pIn2->n;.    x
29740 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b  .pKey = pIn2->z;
29750 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 30  .    x.nData = 0
29760 3b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  ;.    x.nZero = 
29770 30 3b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d  0;.    x.pData =
29780 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
29790 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
297a0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
297b0 26 78 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20  &x, pOp->p3, .  
297c0 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
297d0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
297e0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
297f0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
29800 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73        );.    ass
29810 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29820 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
29830 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
29840 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
29850 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67  .  }.  if( rc) g
29860 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29870 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
29880 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
29890 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
298a0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
298b0 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a  s: key=r[P2@P3].
298c0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
298d0 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
298e0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
298f0 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
29900 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
29910 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
29920 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
29930 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
29940 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
29950 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
29960 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
29970 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
29980 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
29990 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
299a0 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
299b0 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
299c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
299d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
299e0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
299f0 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  p2+pOp->p3<=(p->
29a00 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
29a10 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
29a20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29a30 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
29a40 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
29a50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29a60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29a70 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
29a80 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
29a90 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
29aa0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
29ab0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
29ac0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
29ad0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
29ae0 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  =0 );.  r.pKeyIn
29af0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
29b00 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
29b10 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
29b20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
29b30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
29b40 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72  em[pOp->p2];.  r
29b50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29b60 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
29b70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
29b80 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
29b90 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29ba0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
29bb0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
29bc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29bd0 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54  Delete(pCrsr, BT
29be0 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a  REE_AUXDELETE);.
29bf0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
29c00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29c10 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rror;.  }.  asse
29c20 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
29c30 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
29c40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
29c50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
29c60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29c70 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20 50  ode: Seek P1 * P
29c80 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
29c90 69 73 3a 20 20 4d 6f 76 65 20 50 33 20 74 6f 20  is:  Move P3 to 
29ca0 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50  P1.rowid.**.** P
29cb0 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64  1 is an open ind
29cc0 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33  ex cursor and P3
29cd0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20   is a cursor on 
29ce0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
29cf0 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69  g.** table.  Thi
29d00 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20  s opcode does a 
29d10 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66  deferred seek of
29d20 20 74 68 65 20 50 33 20 74 61 62 6c 65 20 63 75   the P3 table cu
29d30 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72  rsor.** to the r
29d40 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ow that correspo
29d50 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72 72 65  nds to the curre
29d60 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a  nt row of P1..**
29d70 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 65  .** This is a de
29d80 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
29d90 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
29da0 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
29db0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
29dc0 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
29dd0 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
29de0 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
29df0 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
29e00 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
29e10 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
29e20 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e  e an array of in
29e30 74 65 67 65 72 73 20 28 74 79 70 65 20 50 34 5f  tegers (type P4_
29e40 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69  INTARRAY) contai
29e50 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72  ning.** one entr
29e60 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  y for each colum
29e70 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c  n in the P3 tabl
29e80 65 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e 74  e.  If array ent
29e90 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f  ry a(i).** is no
29ea0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61  n-zero, then rea
29eb0 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29  ding column a(i)
29ec0 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50  -1 from cursor P
29ed0 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c  3 is .** equival
29ee0 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e  ent to performin
29ef0 67 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73  g the deferred s
29f00 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61  eek and then rea
29f10 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a  ding column i .*
29f20 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73  * from P1.  This
29f30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
29f40 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64  stored in P3 and
29f50 20 75 73 65 64 20 74 6f 20 72 65 64 69 72 65 63   used to redirec
29f60 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e  t.** reads again
29f70 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31  st P3 over to P1
29f80 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20  , thus possibly 
29f90 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65  avoiding the nee
29fa0 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64  d to.** seek and
29fb0 20 72 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e   read cursor P3.
29fc0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
29fd0 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
29fe0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
29ff0 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
2a000 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
2a010 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
2a020 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
2a030 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
2a040 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
2a050 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
2a060 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
2a070 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
2a080 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
2a090 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
2a0a0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
2a0b0 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
2a0c0 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
2a0d0 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
2a0e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
2a0f0 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
2a100 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a  */.case OP_Seek:
2a110 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
2a120 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
2a130 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
2a140 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
2a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a160 20 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75   The P1 index cu
2a170 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75  rsor */.  VdbeCu
2a180 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20  rsor *pTabCur;  
2a190 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2a1a0 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  P2 table cursor 
2a1b0 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  (OP_Seek only) *
2a1c0 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74     /* Rowid that
2a1f0 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e   P1 current poin
2a200 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ts to */..  asse
2a210 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2a220 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2a230 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2a240 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2a250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2a260 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2a270 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2a280 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2a290 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2a2a0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
2a2b0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
2a2c0 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
2a2d0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2a2e0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2a2f0 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52  sert( !pC->nullR
2a300 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ow || pOp->opcod
2a310 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29  e==OP_IdxRowid )
2a320 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52  ;..  /* The IdxR
2a330 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70  owid and Seek op
2a340 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e  codes are combin
2a350 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68  ed because of th
2a360 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20  e commonality.  
2a370 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62  ** of sqlite3Vdb
2a380 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2a390 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
2a3a0 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20  IdxRowid(). */. 
2a3b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2a3c0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
2a3d0 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65  C);..  /* sqlite
2a3e0 33 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  3VbeCursorRestor
2a3f0 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69  e() can only fai
2a400 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  l if the record 
2a410 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
2a420 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75  .  ** out from u
2a430 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e  nder the cursor.
2a440 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65    That will neve
2a450 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e  r happens for an
2a460 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f   IdxRowid.  ** o
2a470 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f  r Seek opcode */
2a480 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
2a490 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
2a4a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2a4b0 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70  error;..  if( !p
2a4c0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
2a4d0 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
2a4e0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2a4f0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2a500 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2a510 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a520 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
2a530 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  , pC->uc.pCursor
2a540 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
2a550 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2a560 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
2a570 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2a580 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
2a590 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2a5a0 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61  _Seek ){.      a
2a5b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
2a5c0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
2a5d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20  nCursor );.     
2a5e0 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70   pTabCur = p->ap
2a5f0 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Csr[pOp->p3];.  
2a600 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2a610 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  Cur!=0 );.      
2a620 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2a630 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a640 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
2a650 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2a660 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  r->uc.pCursor!=0
2a670 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2a680 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62  ( pTabCur->isTab
2a690 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  le );.      pTab
2a6a0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
2a6b0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2a6c0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
2a6d0 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61  rowid;.      pTa
2a6e0 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f  bCur->deferredMo
2a6f0 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20  veto = 1;.      
2a700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2a710 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
2a720 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d   || pOp->p4.ai==
2a730 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  0 );.      pTabC
2a740 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f  ur->aAltMap = pO
2a750 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20  p->p4.ai;.      
2a760 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72  pTabCur->pAltCur
2a770 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65  sor = pC;.    }e
2a780 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20  lse{.      pOut 
2a790 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2a7a0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20  (p, pOp);.      
2a7b0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
2a7c0 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  d;.      pOut->f
2a7d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
2a7e0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2a7f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2a800 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f  opcode==OP_IdxRo
2a810 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  wid );.    sqlit
2a820 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2a830 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
2a840 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2a850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2a860 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
2a870 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2a880 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2a890 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2a8a0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2a8b0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2a8c0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2a8d0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2a8e0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2a8f0 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2a900 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2a910 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2a920 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2a930 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2a940 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2a950 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2a960 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2a970 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2a980 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2a990 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2a9a0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
2a9b0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
2a9c0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
2a9d0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
2a9e0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2a9f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2aa00 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2aa10 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
2aa20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2aa30 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2aa40 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2aa50 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2aa60 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2aa70 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2aa80 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2aa90 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2aaa0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
2aab0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2aac0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2aad0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
2aae0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2aaf0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2ab00 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2ab10 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
2ab20 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
2ab30 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
2ab40 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
2ab50 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
2ab60 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
2ab70 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
2ab80 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
2ab90 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2aba0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2abb0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2abc0 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
2abd0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2abe0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2abf0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2ac00 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2ac10 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2ac20 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2ac30 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2ac40 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2ac50 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2ac60 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
2ac70 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2ac80 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
2ac90 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
2aca0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2acb0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2acc0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2acd0 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
2ace0 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
2acf0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2ad00 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
2ad10 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
2ad20 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
2ad30 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
2ad40 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2ad50 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2ad60 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2ad70 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
2ad80 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2ad90 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ada0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2adb0 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2adc0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2add0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2ade0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2adf0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2ae00 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2ae10 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
2ae20 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2ae30 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
2ae40 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
2ae50 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2ae60 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2ae70 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2ae80 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
2ae90 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
2aea0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2aeb0 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
2aec0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
2aed0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
2aee0 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
2aef0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
2af00 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2af10 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2af20 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2af30 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
2af40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2af50 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
2af60 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2af70 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
2af80 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2af90 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
2afa0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
2afb0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2afc0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
2afd0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
2afe0 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
2aff0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2b000 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2b010 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2b020 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2b030 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2b040 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
2b050 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
2b060 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2b070 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2b080 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2b090 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2b0a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2b0b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2b0c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b0d0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
2b0e0 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
2b0f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2b100 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2b110 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
2b120 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
2b130 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
2b140 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
2b150 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64  Op->opcode<OP_Id
2b160 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72  xLT ){.    asser
2b170 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2b180 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
2b190 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2b1a0 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
2b1b0 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65  lt_rc = -1;.  }e
2b1c0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2b1d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2b1e0 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2b1f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
2b200 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
2b210 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  _rc = 0;.  }.  r
2b220 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
2b230 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
2b240 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
2b250 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
2b260 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
2b270 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2b280 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
2b290 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  ); }.#endif.  re
2b2a0 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  s = 0;  /* Not n
2b2b0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
2b2c0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
2b2d0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
2b2e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
2b2f0 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70  KeyCompare(db, p
2b300 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
2b310 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c  assert( (OP_IdxL
2b320 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  E&1)==(OP_IdxLT&
2b330 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26  1) && (OP_IdxGE&
2b340 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29  1)==(OP_IdxGT&1)
2b350 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e   );.  if( (pOp->
2b360 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49  opcode&1)==(OP_I
2b370 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61  dxLT&1) ){.    a
2b380 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2b390 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
2b3a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b3b0 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxLT );.    res
2b3c0 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65   = -res;.  }else
2b3d0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2b3e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2b3f0 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
2b400 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
2b410 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
2b420 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2b430 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28  (res>0,2);.  if(
2b440 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2b450 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2b460 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74   if( res>0 ) got
2b470 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2b480 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b490 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
2b4a0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2b4b0 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
2b4c0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
2b4d0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
2b4e0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
2b4f0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
2b500 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
2b510 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2b520 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
2b530 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
2b540 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2b550 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
2b560 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
2b570 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
2b580 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
2b590 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
2b5a0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
2b5b0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
2b5c0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
2b5d0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
2b5e0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
2b5f0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
2b600 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
2b610 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
2b620 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
2b630 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
2b640 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
2b650 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
2b660 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
2b670 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
2b680 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
2b690 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
2b6a0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
2b6b0 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
2b6c0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
2b6d0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
2b6e0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
2b6f0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
2b700 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
2b710 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2b720 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
2b730 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
2b740 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
2b750 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
2b760 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
2b770 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
2b780 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
2b790 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
2b7a0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
2b7b0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2b7c0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
2b7d0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
2b7e0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
2b7f0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2b800 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
2b810 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
2b820 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
2b830 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a   {     /* out2 *
2b840 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
2b850 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73    int iDb;..  as
2b860 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2b870 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
2b880 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20  ( pOp->p1>1 );. 
2b890 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2b8a0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2b8b0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2b8c0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
2b8d0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20  db->nVdbeRead > 
2b8e0 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20  db->nVDestroy+1 
2b8f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2b900 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
2b910 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
2b920 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f  OE_Abort;.    go
2b930 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b940 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a  error;.  }else{.
2b950 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
2b960 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  3;.    assert( D
2b970 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2b980 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
2b990 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20      iMoved = 0; 
2b9a0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
2b9b0 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65   Only to silence
2b9c0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2b9d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2b9e0 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
2b9f0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
2ba00 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
2ba10 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
2ba20 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
2ba30 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
2ba40 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63  oved;.    if( rc
2ba50 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ba60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e  e_to_error;.#ifn
2ba70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba80 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
2ba90 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  f( iMoved!=0 ){.
2baa0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
2bab0 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
2bac0 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
2bad0 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
2bae0 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
2baf0 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
2bb00 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
2bb10 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2bb20 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
2bb30 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
2bb40 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
2bb50 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
2bb60 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2bb70 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
2bb80 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
2bb90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2bba0 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
2bbb0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
2bbc0 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
2bbd0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2bbe0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
2bbf0 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
2bc00 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2bc10 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
2bc20 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
2bc30 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
2bc40 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
2bc50 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
2bc60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2bc70 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
2bc80 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
2bc90 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2bca0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2bcb0 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
2bcc0 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2bcd0 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2bce0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2bcf0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2bd00 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2bd10 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2bd20 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2bd30 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2bd40 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
2bd50 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
2bd60 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2bd70 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
2bd80 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
2bd90 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
2bda0 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
2bdb0 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
2bdc0 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
2bdd0 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
2bde0 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
2bdf0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
2be00 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2be10 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2be20 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
2be30 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
2be40 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
2be50 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
2be60 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
2be70 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
2be80 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
2be90 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
2bea0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
2beb0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2bec0 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
2bed0 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
2bee0 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
2bef0 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
2bf00 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2bf10 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
2bf20 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2bf30 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2bf40 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20  ->p2) );.  rc = 
2bf50 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
2bf60 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
2bf70 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
2bf80 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
2bf90 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
2bfa0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
2bfb0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2bfc0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
2bfd0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
2bfe0 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
2bff0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2c000 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
2c010 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
2c020 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2c030 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
2c040 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
2c050 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
2c060 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
2c070 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2c080 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2c090 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2c0a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
2c0b0 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
2c0c0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
2c0d0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
2c0e0 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
2c0f0 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
2c100 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
2c110 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
2c120 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c130 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
2c140 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
2c150 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
2c160 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
2c170 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
2c180 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
2c190 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
2c1a0 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
2c1b0 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
2c1c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2c1d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2c1e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2c1f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2c200 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2c210 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53  !=0 );.  if( isS
2c220 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
2c230 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2c240 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e  erReset(db, pC->
2c250 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d  uc.pSorter);.  }
2c260 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2c270 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2c280 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2c290 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2c2a0 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a  >isEphemeral );.
2c2b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2c2c0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f  BtreeClearTableO
2c2d0 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  fCursor(pC->uc.p
2c2e0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28  Cursor);.    if(
2c2f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2c300 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2c310 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2c320 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
2c330 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
2c340 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2c350 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
2c360 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
2c370 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
2c380 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2c390 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2c3a0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
2c3b0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2c3c0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
2c3d0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
2c3e0 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
2c3f0 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
2c400 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
2c410 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
2c420 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2c430 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
2c440 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2c450 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
2c460 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
2c470 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
2c480 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
2c490 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
2c4a0 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
2c4b0 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
2c4c0 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
2c4d0 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
2c4e0 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
2c4f0 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
2c500 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
2c510 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
2c520 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2c530 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
2c540 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
2c550 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
2c560 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
2c570 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2c580 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
2c590 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
2c5a0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2c5b0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
2c5c0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
2c5d0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
2c5e0 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
2c5f0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
2c600 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
2c610 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2c620 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
2c630 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
2c640 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
2c650 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
2c660 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
2c670 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
2c680 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2c690 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
2c6a0 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
2c6b0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
2c6c0 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
2c6d0 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
2c6e0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2c6f0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2c700 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ;.  pgno = 0;.  
2c710 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c720 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2c730 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2c740 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2c750 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2c760 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
2c770 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2c780 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
2c790 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
2c7a0 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
2c7b0 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  t!=0 );.  if( pO
2c7c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72  p->opcode==OP_Cr
2c7d0 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20  eateTable ){.   
2c7e0 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45   /* flags = BTRE
2c7f0 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20  E_INTKEY; */.   
2c800 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
2c810 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  NTKEY;.  }else{.
2c820 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
2c830 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20  E_BLOBKEY;.  }. 
2c840 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c850 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
2c860 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66  b->pBt, &pgno, f
2c870 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 20  lags);.  if( rc 
2c880 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2c890 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
2c8a0 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
2c8b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c8c0 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d  code: ParseSchem
2c8d0 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  a P1 * * P4 *.**
2c8e0 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
2c8f0 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
2c900 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
2c910 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
2c920 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
2c930 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
2c940 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a  RE clause P4. .*
2c950 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2c960 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
2c970 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
2c980 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
2c990 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
2c9a0 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
2c9b0 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
2c9c0 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
2c9d0 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
2c9e0 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
2c9f0 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
2ca00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2ca10 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
2ca20 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
2ca30 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a   initData;..  /*
2ca40 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74   Any prepared st
2ca50 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76  atement that inv
2ca60 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65  okes this opcode
2ca70 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78   will hold mutex
2ca80 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79  es.  ** on every
2ca90 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
2caa0 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20   a prerequisite 
2cab0 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20  for invoking .  
2cac0 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  ** sqlite3InitCa
2cad0 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23  llback()..  */.#
2cae0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2caf0 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20  UG.  for(iDb=0; 
2cb00 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62  iDb<db->nDb; iDb
2cb10 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2cb20 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74   iDb==1 || sqlit
2cb30 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
2cb40 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
2cb50 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Bt) );.  }.#endi
2cb60 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  f..  iDb = pOp->
2cb70 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
2cb80 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
2cb90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2cba0 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
2cbb0 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
2cbc0 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a  aLoaded) );.  /*
2cbd0 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f   Used to be a co
2cbe0 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20  nditional */ {. 
2cbf0 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
2cc00 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
2cc10 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
2cc20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
2cc30 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
2cc40 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
2cc50 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
2cc60 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
2cc70 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
2cc80 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
2cc90 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
2cca0 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
2ccb0 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  '.%s WHERE %s OR
2ccc0 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
2ccd0 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
2cce0 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
2ccf0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
2cd00 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
2cd10 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
2cd20 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
2cd30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2cd40 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
2cd50 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
2cd60 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2cd70 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
2cd80 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
2cd90 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
2cda0 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
2cdb0 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
2cdc0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2cdd0 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
2cde0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
2cdf0 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
2ce00 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2ce10 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2ce20 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
2ce30 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2ce40 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
2ce50 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
2ce60 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2ce70 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2ce80 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
2ce90 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
2cea0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2ceb0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
2cec0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2ced0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  m;.    }.    got
2cee0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2cef0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
2cf00 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
2cf10 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2cf20 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
2cf30 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
2cf40 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
2cf50 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
2cf60 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
2cf70 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
2cf80 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
2cf90 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
2cfa0 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
2cfb0 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
2cfc0 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
2cfd0 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
2cfe0 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
2cff0 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
2d000 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
2d010 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
2d020 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
2d030 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
2d040 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d050 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2d060 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2d070 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
2d080 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
2d090 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2d0a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2d0b0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
2d0c0 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
2d0d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2d0e0 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
2d0f0 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
2d100 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2d110 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2d120 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2d130 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2d140 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2d150 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
2d160 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2d170 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2d180 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
2d190 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2d1a0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2d1b0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2d1c0 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2d1d0 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2d1e0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2d1f0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2d200 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2d210 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2d220 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2d230 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
2d240 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2d250 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
2d260 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2d270 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2d280 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2d290 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
2d2a0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2d2b0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2d2c0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2d2d0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2d2e0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
2d2f0 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
2d300 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2d310 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2d320 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
2d330 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2d340 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2d350 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a  estroy opcode).*
2d360 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  * in order to ke
2d370 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
2d380 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2d390 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2d3a0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2d3b0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2d3c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2d3d0 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
2d3e0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2d3f0 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
2d400 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2d410 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2d420 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
2d430 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
2d440 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2d450 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2d460 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2d470 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2d480 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
2d490 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
2d4a0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2d4b0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2d4c0 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
2d4d0 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2d4e0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2d4f0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2d500 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2d510 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2d520 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2d530 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2d540 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2d550 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2d560 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2d570 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
2d580 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2d590 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
2d5a0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2d5b0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2d5c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d5d0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2d5e0 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
2d5f0 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
2d600 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2d610 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20   Do an analysis 
2d620 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  of the currently
2d630 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20   open database. 
2d640 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67   Store in.** reg
2d650 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78  ister P1 the tex
2d660 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65  t of an error me
2d670 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67  ssage describing
2d680 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a   any problems..*
2d690 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73  * If no problems
2d6a0 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72   are found, stor
2d6b0 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69  e a NULL in regi
2d6c0 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  ster P1..**.** T
2d6d0 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63  he register P3 c
2d6e0 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69  ontains the maxi
2d6f0 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
2d700 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
2d710 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
2d720 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
2d730 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
2d740 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2d750 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
2d760 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
2d770 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
2d780 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
2d790 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
2d7a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2d7b0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
2d7c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
2d7d0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
2d7e0 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
2d7f0 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
2d800 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65  ntegers.** store
2d810 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59  d in P4_INTARRAY
2d820 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a   argument..**.**
2d830 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
2d840 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
2d850 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
2d860 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
2d870 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
2d880 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2d890 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
2d8a0 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
2d8b0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
2d8c0 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
2d8d0 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
2d8e0 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
2d8f0 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
2d900 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2d910 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
2d920 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
2d930 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
2d940 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
2d950 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
2d960 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
2d970 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
2d980 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecked */.  int n
2d990 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2d9a0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2d9b0 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2d9c0 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2d9d0 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2d9e0 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2d9f0 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2da00 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2da10 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2da20 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2da30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2da40 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2da50 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2da60 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  Root = pOp->p4.a
2da70 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  i;.  assert( nRo
2da80 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ot>0 );.  assert
2da90 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d  ( aRoot[nRoot]==
2daa0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2dab0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2dac0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
2dad0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
2dae0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2daf0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2db00 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2db10 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2db20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2db30 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2db40 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2db50 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2db60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2db70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2db80 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
2db90 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2dba0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2dbb0 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a   pOp->p5) );.  z
2dbc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2dbd0 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
2dbe0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
2dbf0 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
2dc00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
2dc30 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 70 6e  .i, &nErr);.  pn
2dc40 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2dc50 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2dc60 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2dc70 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
2dc80 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
2dc90 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2dca0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2dcb0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2dcc0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
2dcd0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2dce0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2dcf0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2dd00 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2dd10 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2dd20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2dd30 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2dd40 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2dd50 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2dd60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2dd70 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2dd80 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2dd90 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2dda0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2ddb0 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50  opsis:  rowset(P
2ddc0 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
2ddd0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
2dde0 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
2ddf0 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
2de00 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
2de10 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
2de20 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
2de30 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
2de40 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
2de50 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2de60 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
2de70 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
2de80 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
2de90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2dea0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2deb0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2dec0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
2ded0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2dee0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2def0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2df00 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2df10 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2df20 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2df30 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2df40 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2df50 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2df60 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
2df70 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2df80 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
2df90 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
2dfa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2dfb0 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
2dfc0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2dfd0 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65  is:  r[P3]=rowse
2dfe0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2dff0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2e000 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2e010 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2e020 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2e030 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2e040 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2e050 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2e060 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2e070 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2e080 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2e090 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2e0a0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2e0b0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2e0c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2e0d0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2e0e0 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2e0f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2e100 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2e110 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2e120 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2e130 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2e140 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2e150 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2e160 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2e170 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2e180 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2e190 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2e1a0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2e1b0 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2e1c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2e1d0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2e1e0 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2e1f0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2e200 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2e210 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2e220 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2e230 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2e240 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2e250 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2e260 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2e270 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2e280 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2e290 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2e2a0 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2e2b0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2e2c0 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2e2d0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2e2e0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2e2f0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2e300 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2e310 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2e320 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2e330 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2e340 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2e350 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2e360 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2e370 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2e380 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2e390 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2e3a0 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2e3b0 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2e3c0 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2e3d0 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2e3e0 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2e3f0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2e400 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2e410 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2e420 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2e430 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2e440 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2e450 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2e460 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2e470 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2e480 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2e490 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2e4a0 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2e4b0 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2e4c0 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2e4d0 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2e4e0 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2e4f0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2e500 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2e510 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2e520 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2e530 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2e540 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2e550 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2e560 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2e570 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2e580 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2e590 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2e5a0 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2e5b0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2e5c0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2e5d0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2e5e0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2e5f0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2e600 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2e610 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2e620 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2e630 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2e640 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2e650 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2e660 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2e670 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2e680 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2e690 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2e6a0 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2e6b0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2e6c0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2e6d0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2e6e0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2e6f0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2e700 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2e710 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2e720 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e740 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2e750 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2e760 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2e770 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2e780 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2e790 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2e7a0 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2e7b0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2e7c0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2e7d0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2e7e0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2e7f0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2e800 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2e810 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2e820 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2e830 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2e840 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2e850 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2e860 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2e870 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2e880 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2e890 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2e8a0 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2e8b0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2e8c0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2e8d0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2e8e0 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2e8f0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2e900 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2e910 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2e920 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2e930 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2e940 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2e950 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2e960 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2e970 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2e980 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2e990 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2e9a0 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
2e9b0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2e9c0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2e9d0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2e9e0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2e9f0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2ea00 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2ea10 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2ea20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2ea30 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2ea40 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2ea50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2ea60 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2ea70 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2ea80 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2ea90 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2eaa0 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2eab0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2eac0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2ead0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2eae0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2eaf0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2eb00 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2eb10 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2eb20 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2eb30 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2eb40 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2eb50 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2eb60 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2eb70 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2eb80 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2eb90 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2eba0 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2ebb0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2ebc0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2ebd0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2ebe0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2ebf0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2ec00 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2ec10 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2ec20 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2ec30 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2ec40 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2ec50 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2ec60 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2ec70 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2ec80 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2ec90 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2eca0 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2ecb0 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2ecc0 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2ecd0 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2ece0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2ecf0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2ed10 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2ed20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2ed30 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2ed40 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2ed50 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2ed60 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2ed70 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2ed80 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2ed90 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2eda0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2edb0 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2edc0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2edd0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2ede0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2edf0 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2ee00 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2ee10 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2ee20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2ee30 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2ee40 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2ee50 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2ee60 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2ee70 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2ee80 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2ee90 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2eea0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2eeb0 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2eec0 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2eed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2eee0 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2eef0 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2ef00 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2ef10 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2ef20 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2ef30 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2ef40 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2ef50 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2ef60 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2ef70 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2ef80 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2ef90 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2efa0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2efb0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2efc0 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2efd0 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2efe0 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2eff0 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2f000 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2f010 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2f020 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2f030 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2f040 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2f050 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2f060 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2f070 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2f080 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2f090 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2f0a0 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2f0b0 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2f0c0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2f0d0 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2f0e0 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2f0f0 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2f100 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2f110 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2f120 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2f130 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2f140 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2f150 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2f160 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2f170 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2f180 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2f190 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2f1a0 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2f1b0 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2f1c0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2f1d0 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2f1e0 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2f1f0 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2f200 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2f210 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2f220 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2f230 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2f240 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2f250 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2f260 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2f270 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2f280 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2f290 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2f2a0 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2f2b0 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2f2c0 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2f2d0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2f2e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2f2f0 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
2f300 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2f310 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2f320 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
2f330 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2f340 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2f350 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2f360 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2f370 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2f380 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2f390 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2f3a0 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2f3b0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2f3c0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2f3d0 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2f3e0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2f3f0 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2f400 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2f410 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2f420 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2f430 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2f440 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2f450 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2f460 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2f470 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2f480 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2f490 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2f4a0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2f4b0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2f4c0 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
2f4d0 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
2f4e0 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
2f4f0 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
2f500 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
2f510 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
2f520 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
2f530 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
2f540 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
2f550 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
2f560 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
2f570 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
2f580 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
2f590 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
2f5a0 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
2f5b0 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
2f5c0 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
2f5d0 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72  >nCsr;.    asser
2f5e0 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20  t( nMem>0 );.   
2f5f0 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e   if( pProgram->n
2f600 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b  Csr==0 ) nMem++;
2f610 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
2f620 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
2f630 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
2f640 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
2f650 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
2f660 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2f670 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
2f680 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a  f(VdbeCursor *).
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2f6a0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20  pProgram->nOnce 
2f6b0 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20  * sizeof(u8);.  
2f6c0 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
2f6d0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
2f6e0 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
2f6f0 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
2f700 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2f710 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
2f720 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2f730 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
2f740 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
2f750 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
2f760 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
2f770 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
2f780 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2f790 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
2f7a0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
2f7b0 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
2f7c0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
2f7d0 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28  ame->pc = (int)(
2f7e0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
2f7f0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
2f800 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
2f810 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
2f820 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2f830 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
2f840 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2f850 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
2f860 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
2f870 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
2f880 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
2f890 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
2f8a0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
2f8b0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
2f8c0 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c   pFrame->aOnceFl
2f8d0 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  ag = p->aOnceFla
2f8e0 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  g;.    pFrame->n
2f8f0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f  OnceFlag = p->nO
2f900 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64 65 66 20  nceFlag;.#ifdef 
2f910 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2f920 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
2f930 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63    pFrame->anExec
2f940 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65   = p->anExec;.#e
2f950 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d  ndif..    pEnd =
2f960 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
2f970 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
2f980 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
2f990 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
2f9a0 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
2f9b0 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
2f9c0 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
2f9d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
2f9e0 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  ined;.      pMem
2f9f0 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
2fa00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
2fa10 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
2fa20 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
2fa30 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
2fa40 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
2fa50 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
2fa60 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28  em .        || (
2fa70 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2fa80 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  0 && pProgram->n
2fa90 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e  Mem+1==pFrame->n
2faa0 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20  ChildMem) );.   
2fab0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2fac0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2fad0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
2fae0 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28    assert( (int)(
2faf0 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61  pOp - aOp)==pFra
2fb00 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
2fb10 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
2fb20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
2fb30 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2fb40 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
2fb50 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
2fb60 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
2fb70 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
2fb80 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
2fb90 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
2fba0 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
2fbb0 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
2fbc0 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
2fbd0 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
2fbe0 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
2fbf0 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
2fc00 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
2fc10 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
2fc20 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
2fc30 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65  em = VdbeFrameMe
2fc40 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e  m(pFrame);.  p->
2fc50 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2fc60 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2fc70 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2fc80 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2fc90 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2fca0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2fcb0 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70  em[p->nMem];.  p
2fcc0 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2fcd0 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2fce0 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2fcf0 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2fd00 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2fd10 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2fd20 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2fd30 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2fd40 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51  nOnce;.#ifdef SQ
2fd50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2fd60 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
2fd70 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
2fd80 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  dif.  pOp = &aOp
2fd90 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  [-1];.  memset(p
2fda0 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2fdb0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2fdc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2fdd0 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2fde0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2fdf0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2fe00 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2fe10 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2fe20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2fe30 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2fe40 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2fe50 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2fe60 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2fe70 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2fe80 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2fe90 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2fea0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2feb0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2fec0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2fed0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2fee0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2fef0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2ff00 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2ff10 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2ff20 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2ff30 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2ff40 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2ff50 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2ff60 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2ff70 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2ff80 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2ff90 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2ffa0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2ffb0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2ffc0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2ffd0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2ffe0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2fff0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
30000 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
30010 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
30020 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
30030 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
30040 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
30050 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
30060 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
30070 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
30080 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
30090 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
300a0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
300b0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
300c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
300d0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
300e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
300f0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
30100 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
30110 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
30120 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
30130 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
30140 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
30150 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
30160 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
30170 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
30180 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
30190 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
301a0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
301b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
301c0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
301d0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
301e0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
301f0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
30200 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
30210 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
30220 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
30230 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
30240 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
30250 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
30260 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
30270 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
30280 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
30290 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
302a0 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
302b0 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
302c0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
302d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
302e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
302f0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
30300 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
30310 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
30320 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
30330 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
30340 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
30350 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
30360 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
30370 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
30380 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
30390 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
303a0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
303b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
303c0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
303d0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
303e0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
303f0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
30400 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
30410 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
30420 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
30430 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
30440 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
30450 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
30460 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
30470 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
30480 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
30490 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
304a0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
304b0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
304c0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
304d0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
304e0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
304f0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
30500 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
30510 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
30520 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
30530 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
30540 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
30550 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
30560 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
30570 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
30580 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
30590 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
305a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
305b0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
305c0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
305d0 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
305e0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
305f0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30600 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
30610 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
30620 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
30630 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
30640 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
30650 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
30660 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
30670 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
30680 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
30690 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
306a0 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
306b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
306c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
306d0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
306e0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
306f0 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
30700 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
30710 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
30720 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
30730 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
30740 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
30750 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
30760 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
30770 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
30780 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
30790 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
307a0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
307b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
307c0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
307d0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
307e0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
307f0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
30800 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
30810 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
30820 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
30830 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
30840 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
30850 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
30860 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
30870 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
30880 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
30890 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
308a0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
308b0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
308c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
308d0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
308e0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
308f0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
30900 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
30910 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
30920 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
30930 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
30940 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
30950 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
30960 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
30970 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
30980 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
30990 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
309a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
309b0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
309c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
309d0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
309e0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
309f0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
30a00 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
30a10 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
30a20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
30a30 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
30a40 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
30a50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30a60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30a70 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
30a80 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
30a90 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50  e: IfPos P1 P2 P
30aa0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
30ab0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
30ac0 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
30ad0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
30ae0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
30af0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
30b00 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
30b10 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
30b20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
30b30 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
30b40 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  m the.** value i
30b50 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  n P1 and jump to
30b60 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
30b70 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  e initial value 
30b80 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
30b90 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74  s less than 1, t
30ba0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
30bb0 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   is unchanged an
30bc0 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73  d control passes
30bd0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
30be0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
30bf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
30c00 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
30c10 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
30c20 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
30c30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
30c40 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
30c50 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
30c60 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
30c70 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
30c80 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
30c90 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
30ca0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f   pOp->p3;.    go
30cb0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
30cc0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
30cd0 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
30ce0 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a  Limit P1 P2 P3 *
30cf0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30d00 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
30d10 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28  r[P2]=r[P1]+max(
30d20 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b  0,r[P3]) else r[
30d30 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54  P2]=(-1).**.** T
30d40 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  his opcode perfo
30d50 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75  rms a commonly u
30d60 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  sed computation 
30d70 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
30d80 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  ** LIMIT and OFF
30d90 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b  SET process.  r[
30da0 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69  P1] holds the li
30db0 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b  mit counter.  r[
30dc0 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65  P3].** holds the
30dd0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e   offset counter.
30de0 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d    The opcode com
30df0 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e  putes the combin
30e00 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74  ed value.** of t
30e10 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
30e20 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74  SET and stores t
30e30 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50  hat value in r[P
30e40 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a  2].  The r[P2].*
30e50 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64  * value computed
30e60 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
30e70 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
30e80 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  t will need to b
30e90 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20  e.** visited in 
30ea0 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  order to complet
30eb0 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a  e the query..**.
30ec0 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a  ** If r[P3] is z
30ed0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
30ee0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
30ef0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a  e is no OFFSET.*
30f00 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
30f10 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c  et to be the val
30f20 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c  ue of the LIMIT,
30f30 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66   r[P1]..**.** if
30f40 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P1] is zero o
30f50 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
30f60 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
30f70 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20  no LIMIT.** and 
30f80 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
30f90 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  -1. .**.** Other
30fa0 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73  wise, r[P2] is s
30fb0 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66  et to the sum of
30fc0 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d   r[P1] and r[P3]
30fd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66  ..*/.case OP_Off
30fe0 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f  setLimit: {    /
30ff0 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33  * in1, out2, in3
31000 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
31010 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
31020 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
31030 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >p3];.  pOut = o
31040 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
31050 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
31060 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
31070 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
31080 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
31090 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  & MEM_Int );.  p
310a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 49 6e 31 2d  Out->u.i = pIn1-
310b0 3e 75 2e 69 3c 3d 30 20 3f 20 2d 31 20 3a 20 70  >u.i<=0 ? -1 : p
310c0 49 6e 31 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d 3e  In1->u.i+(pIn3->
310d0 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a  u.i>0?pIn3->u.i:
310e0 30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  0);.  break;.}..
310f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
31100 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
31110 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
31120 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
31130 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]-=P3, goto 
31140 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
31150 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
31160 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
31170 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
31180 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
31190 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e  ** initially non
311a0 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74 72  zero, then subtr
311b0 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 20  act P3 from the 
311c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
311d0 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70  r P1 and.** jump
311e0 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69   to P2.  If regi
311f0 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
31200 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
31210 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a   it unchanged.**
31220 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
31230 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
31240 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
31250 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
31260 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
31270 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31280 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
31290 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
312a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
312b0 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
312c0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
312d0 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  {.     pIn1->u.i
312e0 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
312f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
31300 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
31310 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
31320 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32  crJumpZero P1 P2
31330 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
31340 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29  is: if (--r[P1])
31350 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
31360 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
31370 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67  st hold an integ
31380 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74  er.  Decrement t
31390 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
313a0 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20  ster P1.** then 
313b0 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  jump to P2 if th
313c0 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65  e new value is e
313d0 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a  xactly zero..*/.
313e0 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70  case OP_DecrJump
313f0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Zero: {      /* 
31400 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
31410 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
31420 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
31430 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
31440 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
31450 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e  .i--;.  VdbeBran
31460 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
31470 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
31480 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67  pIn1->u.i==0 ) g
31490 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
314a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
314b0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30  Opcode: AggStep0
314c0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
314d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
314e0 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
314f0 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
31500 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
31510 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
31520 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
31530 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
31540 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
31550 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31560 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
31570 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
31580 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
31590 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
315a0 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
315b0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
315c0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
315d0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
315e0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
315f0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
31600 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
31610 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
31620 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
31630 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
31640 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
31650 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
31660 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
31670 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
31680 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
31690 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
316a0 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
316b0 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
316c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20  ite3_context.** 
316d0 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75  object that is u
316e0 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66  sed to run the f
316f0 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
31700 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74  er P3 is.** as t
31710 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
31720 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
31730 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
31740 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
31750 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
31760 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
31770 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
31780 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
31790 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
317a0 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
317b0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
317c0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
317d0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
317e0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
317f0 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
31800 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
31810 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
31820 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
31830 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
31840 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
31850 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
31860 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
31870 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
31880 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
31890 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
318a0 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  Step0: {.  int n
318b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
318c0 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
318d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
318e0 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
318f0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
31900 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31910 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
31920 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
31930 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
31940 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
31950 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
31960 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
31970 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
31980 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
31990 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
319a0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
319b0 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
319c0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
319d0 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
319e0 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
319f0 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
31a00 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
31a10 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
31a20 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
31a30 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
31a40 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
31a50 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
31a60 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
31a70 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
31a80 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
31a90 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
31aa0 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
31ab0 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
31ac0 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
31ad0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
31ae0 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
31af0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
31b00 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
31b10 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
31b20 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
31b30 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
31b40 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
31b50 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20  Mem;.  Mem t;.. 
31b60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
31b70 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58  type==P4_FUNCCTX
31b80 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70   );.  pCtx = pOp
31b90 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65  ->p4.pCtx;.  pMe
31ba0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
31bb0 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  3];..  /* If thi
31bc0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
31bd0 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
31be0 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
31bf0 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
31c00 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
31c10 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
31c20 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
31c30 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
31c40 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
31c50 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
31c60 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
31c70 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
31c80 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
31c90 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
31ca0 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
31cb0 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
31cc0 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
31cd0 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  t */.  if( pCtx-
31ce0 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b  >pMem != pMem ){
31cf0 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  .    pCtx->pMem 
31d00 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28  = pMem;.    for(
31d10 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20  i=pCtx->argc-1; 
31d20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d  i>=0; i--) pCtx-
31d30 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d  >argv[i] = &aMem
31d40 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d  [pOp->p2+i];.  }
31d50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
31d60 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
31d70 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
31d80 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
31d90 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
31da0 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
31db0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
31dc0 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
31dd0 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
31de0 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e  #endif..  pMem->
31df0 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n++;.  sqlite3Vd
31e00 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62  beMemInit(&t, db
31e10 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
31e20 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a  Ctx->pOut = &t;.
31e30 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
31e40 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Aux = 0;.  pCtx-
31e50 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
31e60 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
31e70 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78  SFunc)(pCtx,pCtx
31e80 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67  ->argc,pCtx->arg
31e90 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  v); /* IMP: R-24
31ea0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
31eb0 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  f( pCtx->fErrorO
31ec0 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
31ed0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b  pCtx->isError ){
31ee0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
31ef0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
31f00 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
31f10 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20  ext(&t));.      
31f20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
31f30 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
31f40 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
31f50 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28  ase(&t);.    if(
31f60 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
31f70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
31f80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
31f90 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
31fa0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
31fb0 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
31fc0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
31fd0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
31fe0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
31ff0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
32000 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
32010 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
32020 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
32030 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
32040 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
32050 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
32060 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
32070 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
32080 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
32090 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
320a0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
320b0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
320c0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
320d0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
320e0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
320f0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
32100 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
32110 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
32120 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
32130 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
32140 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
32150 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
32160 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
32170 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
32180 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
32190 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
321a0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
321b0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
321c0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
321d0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
321e0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
321f0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
32200 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
32210 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
32220 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
32230 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
32240 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
32250 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
32260 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
32270 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
32280 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
32290 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
322a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
322b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
322c0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
322d0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
322e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
322f0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
32300 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
32310 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
32320 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
32330 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
32340 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
32350 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
32360 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
32370 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
32380 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
32390 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
323a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
323b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
323c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
323d0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
323e0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
323f0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
32400 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
32410 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
32420 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
32430 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
32440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
32450 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32460 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
32470 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
32480 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
32490 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
324a0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
324b0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
324c0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
324d0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
324e0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
324f0 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
32500 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
32510 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
32520 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
32530 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
32540 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
32550 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
32560 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
32570 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
32580 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
32590 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
325a0 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
325b0 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
325c0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
325d0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
325e0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
325f0 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
32600 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
32610 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
32620 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
32630 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
32640 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
32650 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
32660 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
32670 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
32680 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
32690 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
326a0 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
326b0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
326c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
326d0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
326e0 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
32710 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32730 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
32740 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
32750 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
32760 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
32770 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
32780 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
32790 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
327a0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
327b0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
327c0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
327d0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
327e0 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
327f0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
32800 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
32810 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
32820 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
32830 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
32840 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
32850 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
32860 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
32870 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
32880 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
32890 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
328a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc!=SQLITE_BUS
328b0 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  Y ) goto abort_d
328c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
328d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
328e0 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
328f0 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
32900 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
32910 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
32920 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
32930 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
32940 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
32950 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
32960 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
32970 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
32980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
32990 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
329a0 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
329b0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
329c0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
329d0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
329e0 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
329f0 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
32a00 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
32a10 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
32a20 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
32a30 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
32a40 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
32a50 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
32a60 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
32a70 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
32a80 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
32a90 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
32aa0 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
32ab0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
32ac0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
32ad0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
32ae0 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
32af0 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
32b00 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
32b10 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
32b20 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
32b30 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
32b40 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
32b50 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
32b60 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
32b70 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
32b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b90 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
32ba0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
32bb0 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
32bc0 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
32bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
32be0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
32bf0 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
32c00 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
32c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
32c20 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
32c30 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
32c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c50 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
32c60 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
32c70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32c80 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
32c90 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
32ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
32cb0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
32cc0 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
32cd0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
32ce0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
32cf0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
32d00 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
32d10 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
32d20 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
32d30 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
32d40 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
32d50 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
32d60 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
32d70 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
32d80 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
32d90 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
32da0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
32db0 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
32dc0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
32dd0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
32de0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
32df0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
32e00 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
32e10 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
32e20 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
32e30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
32e40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
32e50 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
32e60 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
32e70 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
32e80 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
32e90 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
32ea0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
32eb0 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
32ec0 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
32ed0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
32ee0 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
32ef0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
32f00 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
32f10 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
32f20 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
32f30 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
32f40 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
32f50 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
32f60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
32f70 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
32f80 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
32f90 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
32fa0 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
32fb0 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
32fc0 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
32fd0 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
32fe0 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
32ff0 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
33000 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
33010 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
33020 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
33030 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
33040 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
33050 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
33060 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
33070 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
33080 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
33090 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
330a0 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
330b0 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
330c0 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
330d0 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
330e0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
330f0 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
33100 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
33110 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
33120 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
33130 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
33140 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
33150 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
33160 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
33170 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
33180 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
33190 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
331a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
331b0 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20  or(p,.          
331c0 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
331d0 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
331e0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
331f0 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
33200 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
33210 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
33220 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
33230 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
33240 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
33250 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
33260 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
33270 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
33280 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
33290 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
332a0 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
332b0 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
332c0 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
332d0 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
332e0 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
332f0 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
33300 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
33310 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
33320 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
33330 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
33340 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
33350 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
33360 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33370 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
33380 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
33390 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
333a0 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
333b0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
333c0 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
333d0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
333e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
333f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
33400 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
33410 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
33420 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
33430 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
33440 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33450 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
33460 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
33470 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
33480 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
33490 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
334a0 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
334b0 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
334c0 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
334d0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
334e0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
334f0 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
33500 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
33510 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
33520 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
33530 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
33540 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
33550 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
33560 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
33570 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
33580 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
33590 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
335a0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
335b0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
335c0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
335d0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
335e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
335f0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
33600 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
33610 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
33620 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33630 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
33640 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
33650 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
33660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33670 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
33680 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c   rc ) eNew = eOl
33690 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69  d;.  eNew = sqli
336a0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
336b0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
336c0 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66  New);..  pOut->f
336d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
336e0 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
336f0 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
33700 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
33710 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
33720 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
33730 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
33740 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
33750 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
33760 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
33770 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
33780 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
33790 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  g);.  if( rc ) g
337a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
337b0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
337c0 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
337d0 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
337e0 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
337f0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  d(SQLITE_OMIT_VA
33800 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65  CUUM) && !define
33810 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
33820 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TACH)./* Opcode:
33830 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20   Vacuum * * * * 
33840 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
33850 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
33860 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  se.  This opcode
33870 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65   will cause othe
33880 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  r virtual.** mac
33890 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61  hines to be crea
338a0 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74  ted and run.  It
338b0 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c   may not be call
338c0 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a  ed from within.*
338d0 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  * a transaction.
338e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
338f0 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
33900 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
33910 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
33920 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
33930 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66  rrMsg, db);.  if
33940 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
33950 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
33960 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
33970 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
33980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
33990 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
339a0 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
339b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
339c0 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
339d0 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
339e0 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
339f0 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
33a00 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
33a10 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
33a20 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
33a30 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
33a40 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
33a50 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
33a60 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
33a70 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
33a80 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
33a90 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
33aa0 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
33ab0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
33ac0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
33ad0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
33ae0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
33af0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
33b00 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
33b10 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
33b20 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
33b30 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
33b40 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
33b50 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
33b60 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62  cuum(pBt);.  Vdb
33b70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
33b80 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b  =SQLITE_DONE,2);
33b90 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
33ba0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
33bb0 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
33bc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
33bd0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
33be0 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  OK;.    goto jum
33bf0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
33c00 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
33c10 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
33c20 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
33c30 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
33c40 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
33c50 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e  to expire.  When
33c60 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   an expired stat
33c70 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63  ement.** is exec
33c80 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  uted using sqlit
33c90 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c  e3_step() it wil
33ca0 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74  l either automat
33cb0 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70  ically.** reprep
33cc0 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69  are itself (if i
33cd0 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  t was originally
33ce0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73   created using s
33cf0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
33d00 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69  2()).** or it wi
33d10 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c  ll fail with SQL
33d20 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a  ITE_SCHEMA..** .
33d30 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
33d40 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
33d50 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
33d60 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
33d70 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
33d80 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
33d90 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
33da0 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69  tatement is expi
33db0 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  red..*/.case OP_
33dc0 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
33dd0 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
33de0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
33df0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
33e00 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
33e10 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
33e20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33e30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
33e40 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
33e50 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
33e60 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
33e70 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
33e80 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50  s: iDb=P1 root=P
33e90 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a  2 write=P3.**.**
33ea0 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
33eb0 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
33ec0 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
33ed0 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
33ee0 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
33ef0 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
33f00 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
33f10 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
33f20 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
33f30 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
33f40 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
33f50 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
33f60 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
33f70 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
33f80 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
33f90 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
33fa0 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
33fb0 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
33fc0 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
33fd0 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
33fe0 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
33ff0 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
34000 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
34010 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
34020 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
34030 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
34040 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
34050 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
34060 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
34070 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
34080 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
34090 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
340a0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
340b0 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
340c0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
340d0 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
340e0 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
340f0 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
34100 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
34110 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
34120 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
34130 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
34140 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
34150 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a  reeMask, p1) );.
34160 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
34170 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
34180 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
34190 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
341a0 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
341b0 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
341c0 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
341d0 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 72  Lock);.    if( r
341e0 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  c ){.      if( (
341f0 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
34200 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
34210 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
34220 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
34230 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
34240 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62  eError(p, "datab
34250 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
34260 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
34270 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
34280 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
34290 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
342a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
342b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
342c0 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
342d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
342e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
342f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
34300 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
34310 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
34320 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
34330 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
34340 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
34350 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
34360 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
34370 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
34380 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
34390 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
343a0 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
343b0 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
343c0 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
343d0 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
343e0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
343f0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
34400 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
34410 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
34420 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
34430 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
34440 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
34450 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
34460 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
34470 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
34480 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
34490 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
344a0 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
344b0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
344c0 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
344d0 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
344e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
344f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
34500 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
34510 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34520 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
34530 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
34540 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
34550 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
34560 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
34570 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65   P2 is a registe
34580 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
34590 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
345a0 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
345b0 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c  base .** P1. Cal
345c0 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65  l the xCreate me
345d0 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
345e0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
345f0 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d  VCreate: {.  Mem
34600 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
34610 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
34620 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
34630 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
34640 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20  st char *zTab;  
34650 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76  /* Name of the v
34660 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
34670 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
34680 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
34690 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64  );.  sMem.db = d
346a0 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20  b;.  /* Because 
346b0 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73  P2 is always a s
346c0 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74  tatic string, it
346d0 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
346e0 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  or the.  ** sqli
346f0 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29  te3VdbeMemCopy()
34700 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73   to fail */.  as
34710 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d  sert( (aMem[pOp-
34720 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p2].flags & MEM
34730 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Str)!=0 );.  as
34740 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d  sert( (aMem[pOp-
34750 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p2].flags & MEM
34760 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20  _Static)!=0 );. 
34770 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
34780 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20  eMemCopy(&sMem, 
34790 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
347a0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
347b0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54  QLITE_OK );.  zT
347c0 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ab = (const char
347d0 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
347e0 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61  text(&sMem);.  a
347f0 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64  ssert( zTab || d
34800 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
34810 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b  );.  if( zTab ){
34820 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
34830 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
34840 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61  db, pOp->p1, zTa
34850 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  b, &p->zErrMsg);
34860 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
34870 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
34880 65 6d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  em);.  if( rc ) 
34890 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
348a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
348b0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
348c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
348d0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
348e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
348f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
34900 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
34910 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
34920 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
34930 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
34940 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
34950 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
34960 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
34970 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
34980 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
34990 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44  roy: {.  db->nVD
349a0 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d  estroy++;.  rc =
349b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
349c0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
349d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
349e0 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79  .  db->nVDestroy
349f0 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  --;.  if( rc ) g
34a00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34a10 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
34a20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
34a30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34a40 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
34a50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
34a60 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
34a70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
34a80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
34a90 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
34aa0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
34ab0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
34ac0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
34ad0 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
34ae0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
34af0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
34b00 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
34b10 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
34b20 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
34b30 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
34b40 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
34b50 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
34b60 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
34b70 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
34b80 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  VCur;.  sqlite3_
34b90 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
34ba0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
34bb0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
34bc0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
34bd0 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20  eader );.  pCur 
34be0 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30  = 0;.  pVCur = 0
34bf0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
34c00 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
34c10 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30  ;.  if( pVtab==0
34c20 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d   || NEVER(pVtab-
34c30 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a  >pModule==0) ){.
34c40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
34c50 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f  LOCKED;.    goto
34c60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
34c70 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75  ror;.  }.  pModu
34c80 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
34c90 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  ule;.  rc = pMod
34ca0 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
34cb0 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c  , &pVCur);.  sql
34cc0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
34cd0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
34ce0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
34cf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34d00 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61  or;..  /* Initia
34d10 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
34d20 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
34d30 61 73 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e  ass */.  pVCur->
34d40 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
34d50 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
34d60 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
34d70 63 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61  ct */.  pCur = a
34d80 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
34d90 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
34da0 20 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a   CURTYPE_VTAB);.
34db0 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
34dc0 20 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72    pCur->uc.pVCur
34dd0 20 3d 20 70 56 43 75 72 3b 0a 20 20 20 20 70 56   = pVCur;.    pV
34de0 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d  tab->nRef++;.  }
34df0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
34e00 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
34e10 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  ed );.    pModul
34e20 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29  e->xClose(pVCur)
34e30 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
34e40 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  m;.  }.  break;.
34e50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
34e60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
34e70 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
34e80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
34e90 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
34ea0 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20  ode: VFilter P1 
34eb0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
34ec0 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b  nopsis: iplan=r[
34ed0 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a  P3] zplan='P4'.*
34ee0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
34ef0 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
34f00 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
34f10 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
34f20 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
34f30 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
34f40 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
34f50 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
34f60 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
34f70 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
34f80 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
34f90 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
34fa0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
34fb0 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
34fc0 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
34fd0 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
34fe0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
34ff0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
35000 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
35010 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
35020 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
35030 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
35040 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
35050 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
35060 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
35070 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
35080 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
35090 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
350a0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
350b0 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
350c0 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
350d0 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
350e0 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
350f0 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
35100 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
35110 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
35120 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
35130 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
35140 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
35150 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
35160 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
35170 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
35180 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
35190 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
351a0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
351b0 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
351c0 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
351d0 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
351e0 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
351f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
35200 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
35210 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
35220 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
35230 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
35240 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
35250 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
35260 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a  _cursor *pVCur;.
35270 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
35280 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72  pVtab;.  VdbeCur
35290 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74  sor *pCur;.  int
352a0 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   res;.  int i;. 
352b0 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20   Mem **apArg;.. 
352c0 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b   pQuery = &aMem[
352d0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
352e0 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
352f0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
35300 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
35310 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
35320 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45  (pQuery) );.  RE
35330 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
35340 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
35350 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
35360 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
35370 5f 56 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72  _VTAB );.  pVCur
35380 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
35390 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43  r;.  pVtab = pVC
353a0 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ur->pVtab;.  pMo
353b0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
353c0 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61  odule;..  /* Gra
353d0 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62  b the index numb
353e0 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61  er and argc para
353f0 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65  meters */.  asse
35400 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61  rt( (pQuery->fla
35410 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26  gs&MEM_Int)!=0 &
35420 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d  & pArgc->flags==
35430 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72  MEM_Int );.  nAr
35440 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e  g = (int)pArgc->
35450 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20  u.i;.  iQuery = 
35460 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69  (int)pQuery->u.i
35470 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
35480 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
35490 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a  d */.  res = 0;.
354a0 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
354b0 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b  rg;.  for(i = 0;
354c0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
354d0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
354e0 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20  Argc[i+1];.  }. 
354f0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
35500 46 69 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51  Filter(pVCur, iQ
35510 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
35520 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
35530 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
35540 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
35550 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
35560 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35570 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20  _error;.  res = 
35580 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
35590 43 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  Cur);.  pCur->nu
355a0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62  llRow = 0;.  Vdb
355b0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
355c0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
355d0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
355e0 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
355f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
35600 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35610 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
35620 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35630 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
35640 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
35650 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
35660 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75  sis: r[P3]=vcolu
35670 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  mn(P2).**.** Sto
35680 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
35690 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
356a0 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
356b0 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
356c0 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
356d0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
356e0 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
356f0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
35700 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
35710 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
35720 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
35730 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
35740 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
35750 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
35760 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
35770 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
35780 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
35790 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
357a0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
357b0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
357c0 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
357d0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
357e0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
357f0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
35800 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
35810 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
35820 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
35830 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28  p, pDest);.  if(
35840 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
35850 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
35860 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
35870 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
35880 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
35890 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  r->uc.pVCur->pVt
358a0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
358b0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
358c0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
358d0 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
358e0 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
358f0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
35900 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65  text));.  sConte
35910 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b  xt.pOut = pDest;
35920 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
35930 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
35940 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  l);.  rc = pModu
35950 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
35960 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f  ->uc.pVCur, &sCo
35970 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  ntext, pOp->p2);
35980 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
35990 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
359a0 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e  tab);.  if( sCon
359b0 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a  text.isError ){.
359c0 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78      rc = sContex
359d0 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  t.isError;.  }. 
359e0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
359f0 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74  geEncoding(pDest
35a00 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52  , encoding);.  R
35a10 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
35a20 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
35a30 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
35a40 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20  SIZE(pDest);..  
35a50 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
35a60 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20  emTooBig(pDest) 
35a70 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
35a80 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  big;.  }.  if( r
35a90 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35aa0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35ab0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
35ac0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
35ad0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
35ae0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
35af0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
35b00 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
35b10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
35b20 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
35b30 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
35b40 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
35b50 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
35b60 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
35b70 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
35b80 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
35b90 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
35ba0 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
35bb0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
35bc0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
35bd0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
35be0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
35bf0 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
35c00 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
35c10 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
35c20 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
35c30 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
35c40 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
35c50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
35c60 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
35c70 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
35c80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
35c90 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72  sert( pCur->eCur
35ca0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54  Type==CURTYPE_VT
35cb0 41 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  AB );.  if( pCur
35cc0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
35cd0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
35ce0 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  tab = pCur->uc.p
35cf0 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
35d00 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
35d10 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
35d20 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
35d30 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
35d40 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
35d50 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
35d60 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
35d70 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
35d80 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
35d90 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
35da0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
35db0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
35dc0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
35dd0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
35de0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
35df0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
35e00 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
35e10 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
35e20 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
35e30 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
35e40 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
35e50 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
35e60 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
35e70 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
35e80 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
35e90 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
35ea0 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  */.  rc = pModul
35eb0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75  e->xNext(pCur->u
35ec0 63 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69  c.pVCur);.  sqli
35ed0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35ee0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
35ef0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35f00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35f10 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  r;.  res = pModu
35f20 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75  le->xEof(pCur->u
35f30 63 2e 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65  c.pVCur);.  Vdbe
35f40 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
35f50 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
35f60 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
35f70 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
35f80 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f   to P2 */.    go
35f90 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
35fa0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
35fb0 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74  rrupt;.  }.  got
35fc0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
35fd0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
35fe0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
35ff0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36000 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36010 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36020 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
36030 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
36040 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
36050 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
36060 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
36070 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
36080 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
36090 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
360a0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
360b0 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
360c0 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
360d0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
360e0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
360f0 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
36100 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
36110 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
36120 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
36130 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
36140 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
36150 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
36160 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
36170 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
36180 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
36190 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
361a0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
361b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
361c0 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
361d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
361e0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
361f0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
36200 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
36210 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
36220 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
36230 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
36240 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
36250 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
36260 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
36270 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
36280 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
36290 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
362a0 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
362b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
362c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
362d0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
362e0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  F8);.  if( rc ) 
362f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36300 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20  o_error;.  rc = 
36310 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
36320 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70  xRename(pVtab, p
36330 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69  Name->z);.  sqli
36340 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36350 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
36360 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
36370 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36380 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36390 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
363a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
363b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
363c0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
363d0 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
363e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
363f0 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50  nopsis: data=r[P
36400 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69  3@P2].**.** P4 i
36410 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
36420 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
36430 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
36440 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
36450 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
36460 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
36470 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
36480 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
36490 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
364a0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
364b0 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
364c0 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
364d0 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
364e0 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
364f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
36500 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
36510 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
36520 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
36530 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
36540 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
36550 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
36560 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
36570 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
36580 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
36590 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
365a0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
365b0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
365c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
365d0 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
365e0 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
365f0 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
36600 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
36610 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
36620 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
36630 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
36640 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
36650 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
36660 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
36670 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
36680 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
36690 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
366a0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
366b0 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
366c0 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
366d0 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
366e0 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
366f0 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
36700 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
36710 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
36720 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
36730 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
36740 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
36750 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
36760 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
36770 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
36780 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
36790 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
367a0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
367b0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
367c0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
367d0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
367e0 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
367f0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
36800 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
36810 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
36820 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35  serted..**.** P5
36830 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63   is the error ac
36840 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63  tions (OE_Replac
36850 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49  e, OE_Fail, OE_I
36860 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a  gnore, etc) to.*
36870 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63  * apply in the c
36880 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61  ase of a constra
36890 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61  int failure on a
368a0 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61  n insert or upda
368b0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  te..*/.case OP_V
368c0 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
368d0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
368e0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
368f0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
36900 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  ;.  int nArg;.  
36910 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
36920 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d  int64 rowid;.  M
36930 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65  em **apArg;.  Me
36940 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74  m *pX;..  assert
36950 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20  ( pOp->p2==1    
36960 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
36970 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70  OE_Fail   || pOp
36980 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  ->p5==OE_Rollbac
36990 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  k .       || pOp
369a0 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c  ->p5==OE_Abort |
369b0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  | pOp->p5==OE_Ig
369c0 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  nore || pOp->p5=
369d0 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b  =OE_Replace.  );
369e0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
369f0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
36a00 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
36a10 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
36a20 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
36a30 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
36a40 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
36a50 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
36a60 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  D;.    goto abor
36a70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36a80 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
36a90 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
36aa0 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32    nArg = pOp->p2
36ab0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
36ac0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42  >p4type==P4_VTAB
36ad0 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
36ae0 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74  (pModule->xUpdat
36af0 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61  e) ){.    u8 vta
36b00 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62  bOnConflict = db
36b10 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
36b20 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
36b30 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d  >apArg;.    pX =
36b40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
36b50 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
36b60 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
36b70 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
36b80 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20  alid(pX) );.    
36b90 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
36ba0 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20  ge(p, pX);.     
36bb0 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a   apArg[i] = pX;.
36bc0 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20        pX++;.    
36bd0 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  }.    db->vtabOn
36be0 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e  Conflict = pOp->
36bf0 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  p5;.    rc = pMo
36c00 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
36c10 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
36c20 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64  , &rowid);.    d
36c30 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
36c40 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  t = vtabOnConfli
36c50 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ct;.    sqlite3V
36c60 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
36c70 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
36c80 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
36c90 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20   && pOp->p1 ){. 
36ca0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
36cb0 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
36cc0 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
36cd0 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
36ce0 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
36cf0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
36d00 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
36d10 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
36d20 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  )==SQLITE_CONSTR
36d30 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e  AINT && pOp->p4.
36d40 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69  pVtab->bConstrai
36d50 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  nt ){.      if( 
36d60 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
36d70 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  re ){.        rc
36d80 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
36d90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
36da0 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
36db0 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f  n = ((pOp->p5==O
36dc0 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f  E_Replace) ? OE_
36dd0 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29  Abort : pOp->p5)
36de0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
36df0 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  lse{.      p->nC
36e00 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20  hange++;.    }. 
36e10 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
36e20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36e30 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
36e40 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36e50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36e60 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
36e70 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
36e80 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
36e90 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
36ea0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
36eb0 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
36ec0 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
36ed0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
36ee0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
36ef0 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
36f00 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
36f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
36f20 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
36f30 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
36f40 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
36f50 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
36f60 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
36f70 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
36f80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
36f90 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
36fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
36fb0 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
36fc0 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
36fd0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
36fe0 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
36ff0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
37000 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
37010 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
37020 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
37030 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
37040 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
37050 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
37060 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
37070 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
37080 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
37090 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
370a0 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
370b0 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
370c0 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
370d0 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
370e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
370f0 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
37100 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
37110 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69  * out2 */.  unsi
37120 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
37130 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
37140 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
37150 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
37160 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
37170 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
37180 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
37190 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
371a0 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
371b0 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
371c0 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
371d0 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
371e0 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
371f0 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
37200 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
37210 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
37220 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
37230 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
37240 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
37250 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
37260 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
37270 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
37280 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
37290 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
372a0 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
372b0 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
372c0 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
372d0 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
372e0 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
372f0 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
37300 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
37310 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
37320 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
37330 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
37340 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
37350 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
37360 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
37370 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
37380 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
37390 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
373a0 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
373b0 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
373c0 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
373d0 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
373e0 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
373f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
37400 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
37410 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69  ;.  char *z;..#i
37420 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37430 54 5f 54 52 41 43 45 0a 20 20 2f 2a 20 49 66 20  T_TRACE.  /* If 
37440 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
37450 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
37460 6e 20 69 74 20 6d 75 73 74 20 62 65 20 61 6e 20  n it must be an 
37470 53 51 4c 20 63 6f 6d 6d 65 6e 74 20 73 74 72 69  SQL comment stri
37480 6e 67 2e 0a 20 20 2a 2a 20 54 68 65 20 22 2d 2d  ng..  ** The "--
37490 22 20 73 74 72 69 6e 67 20 69 73 20 62 72 6f 6b  " string is brok
374a0 65 6e 20 75 70 20 74 6f 20 70 72 65 76 65 6e 74  en up to prevent
374b0 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 73   false-positives
374c0 20 77 69 74 68 20 73 72 63 63 6b 31 2e 63 20 2a   with srcck1.c *
374d0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
374e0 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 73 74 72 6e  >p4.z==0 || strn
374f0 63 6d 70 28 70 4f 70 2d 3e 70 34 2e 7a 2c 20 22  cmp(pOp->p4.z, "
37500 2d 22 20 22 2d 20 22 2c 20 33 29 3d 3d 30 20 29  -" "- ", 3)==0 )
37510 3b 0a 20 20 69 66 28 20 28 64 62 2d 3e 6d 54 72  ;.  if( (db->mTr
37520 61 63 65 20 26 20 28 53 51 4c 49 54 45 5f 54 52  ace & (SQLITE_TR
37530 41 43 45 5f 53 54 4d 54 7c 53 51 4c 49 54 45 5f  ACE_STMT|SQLITE_
37540 54 52 41 43 45 5f 4c 45 47 41 43 59 29 29 21 3d  TRACE_LEGACY))!=
37550 30 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e  0.   && !p->doin
37560 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54  gRerun.   && (zT
37570 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
37580 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
37590 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
375a0 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
375b0 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
375c0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 54 72  .    if( db->mTr
375d0 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
375e0 43 45 5f 4c 45 47 41 43 59 20 29 7b 0a 20 20 20  CE_LEGACY ){.   
375f0 20 20 20 76 6f 69 64 20 28 2a 78 29 28 76 6f 69     void (*x)(voi
37600 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 20  d*,const char*) 
37610 3d 20 28 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  = (void(*)(void*
37620 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 64 62  ,const char*))db
37630 2d 3e 78 54 72 61 63 65 3b 0a 20 20 20 20 20 20  ->xTrace;.      
37640 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
37650 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
37660 63 65 29 3b 0a 20 20 20 20 20 20 78 28 64 62 2d  ce);.      x(db-
37670 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a  >pTraceArg, z);.
37680 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
37690 65 65 28 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ee(z);.    }else
376a0 0a 23 65 6e 64 69 66 0a 20 20 20 20 7b 0a 20 20  .#endif.    {.  
376b0 20 20 20 20 28 76 6f 69 64 29 64 62 2d 3e 78 54      (void)db->xT
376c0 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
376d0 45 5f 53 54 4d 54 2c 20 64 62 2d 3e 70 54 72 61  E_STMT, db->pTra
376e0 63 65 41 72 67 2c 20 70 2c 20 7a 54 72 61 63 65  ceArg, p, zTrace
376f0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 69 66  );.    }.  }.#if
37700 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
37710 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
37720 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
37730 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
37740 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
37750 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
37760 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
37770 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
37780 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61  {.      if( DbMa
37790 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
377a0 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e  ask, i)==0 ) con
377b0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
377c0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
377d0 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
377e0 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
377f0 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
37800 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
37810 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37820 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
37830 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
37840 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
37850 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
37860 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
37870 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
37880 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
37890 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
378a0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
378b0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
378c0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
378d0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
378e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
378f0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
37900 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
37910 54 52 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70  TRACE */.  if( p
37920 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
37930 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
37940 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  k;.}..#ifdef SQL
37950 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
37960 52 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64  R_HINTS./* Opcod
37970 65 3a 20 43 75 72 73 6f 72 48 69 6e 74 20 50 31  e: CursorHint P1
37980 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
37990 50 72 6f 76 69 64 65 20 61 20 68 69 6e 74 20 74  Provide a hint t
379a0 6f 20 63 75 72 73 6f 72 20 50 31 20 74 68 61 74  o cursor P1 that
379b0 20 69 74 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74   it only needs t
379c0 6f 20 72 65 74 75 72 6e 20 72 6f 77 73 20 74 68  o return rows th
379d0 61 74 0a 2a 2a 20 73 61 74 69 73 66 79 20 74 68  at.** satisfy th
379e0 65 20 45 78 70 72 20 69 6e 20 50 34 2e 20 20 54  e Expr in P4.  T
379f0 4b 5f 52 45 47 49 53 54 45 52 20 74 65 72 6d 73  K_REGISTER terms
37a00 20 69 6e 20 74 68 65 20 50 34 20 65 78 70 72 65   in the P4 expre
37a10 73 73 69 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74  ssion refer.** t
37a20 6f 20 76 61 6c 75 65 73 20 63 75 72 72 65 6e 74  o values current
37a30 6c 79 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ly held in regis
37a40 74 65 72 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e  ters.  TK_COLUMN
37a50 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34   terms in the P4
37a60 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 72  .** expression r
37a70 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  efer to columns 
37a80 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 74 6f  in the b-tree to
37a90 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31   which cursor P1
37aa0 20 69 73 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f   is pointing..*/
37ab0 0a 63 61 73 65 20 4f 50 5f 43 75 72 73 6f 72 48  .case OP_CursorH
37ac0 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  int: {.  VdbeCur
37ad0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
37ae0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
37af0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
37b00 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
37b10 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
37b20 34 5f 45 58 50 52 20 29 3b 0a 20 20 70 43 20 3d  4_EXPR );.  pC =
37b30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
37b40 31 5d 3b 0a 20 20 69 66 28 20 70 43 20 29 7b 0a  1];.  if( pC ){.
37b50 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
37b60 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
37b70 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 73  E_BTREE );.    s
37b80 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
37b90 72 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  rHint(pC->uc.pCu
37ba0 72 73 6f 72 2c 20 42 54 52 45 45 5f 48 49 4e 54  rsor, BTREE_HINT
37bb0 5f 52 41 4e 47 45 2c 0a 20 20 20 20 20 20 20 20  _RANGE,.        
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bd0 20 20 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72     pOp->p4.pExpr
37be0 2c 20 61 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 62  , aMem);.  }.  b
37bf0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
37c00 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
37c10 43 55 52 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a  CURSOR_HINTS */.
37c20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
37c30 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
37c40 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
37c50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
37c60 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
37c70 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
37c80 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
37c90 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
37ca0 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
37cb0 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
37cc0 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
37cd0 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
37ce0 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
37cf0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
37d00 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
37d10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
37d20 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
37d30 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
37d40 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
37d50 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
37d60 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
37d70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
37d80 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
37d90 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
37da0 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
37db0 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
37dc0 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
37dd0 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
37de0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
37df0 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
37e00 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
37e10 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
37e20 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
37e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37e40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37e70 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
37e80 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
37e90 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
37ea0 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
37eb0 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
37ec0 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
37ed0 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
37ee0 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
37ef0 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
37f00 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
37f10 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
37f20 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
37f30 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
37f40 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
37f50 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
37f60 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
37f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37fb0 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
37fc0 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
37fd0 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
37fe0 6e 64 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33  ndTime = sqlite3
37ff0 48 77 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20  Hwtime();.      
38000 69 66 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72  if( endTime>star
38010 74 20 29 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63  t ) pOrigOp->cyc
38020 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d  les += endTime -
38030 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f   start;.      pO
38040 72 69 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20  rigOp->cnt++;.  
38050 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
38060 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
38070 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
38080 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
38090 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
380a0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
380b0 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
380c0 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
380d0 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
380e0 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
380f0 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
38100 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
38110 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
38120 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
38130 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
38140 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
38150 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
38160 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
38170 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
38180 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
38190 72 74 28 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31  rt( pOp>=&aOp[-1
381a0 5d 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  ] && pOp<&aOp[p-
381b0 3e 6e 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64  >nOp-1] );..#ifd
381c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
381d0 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
381e0 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
381f0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 75 38  race ){.      u8
38200 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71   opProperty = sq
38210 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
38220 72 74 79 5b 70 4f 72 69 67 4f 70 2d 3e 6f 70 63  rty[pOrigOp->opc
38230 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ode];.      if( 
38240 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22  rc!=0 ) printf("
38250 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
38260 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
38270 74 79 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32  ty & (OPFLG_OUT2
38280 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  ) ){.        reg
38290 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67  isterTrace(pOrig
382a0 4f 70 2d 3