/ Hex Artifact Content
Login

Artifact 005e691ea4c7d51e6c1a69d9389aeb34700884c85f51681817ddea3fdc2fc39b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2500: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2510: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
2520: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2530: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2540: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2550: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2560: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2570: 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  e) ){.    p->apC
2580: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
2590: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
25a0: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
25b0: 74 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74  t(pCx, 0, offset
25c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41  of(VdbeCursor,pA
25d0: 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  ltCursor));.    
25e0: 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20  pCx->eCurType = 
25f0: 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43  eCurType;.    pC
2600: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
2610: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
2620: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d  nField;.    pCx-
2630: 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d  >aOffset = &pCx-
2640: 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  >aType[nField];.
2650: 20 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65      if( eCurType
2660: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2670: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63  ){.      pCx->uc
2680: 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  .pCursor = (BtCu
2690: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
26a0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
26b0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
26c0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
26d0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
26e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
26f0: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63  rsorZero(pCx->uc
2700: 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
2710: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
2720: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
2740: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
2750: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2760: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2770: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2780: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2790: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
27a0: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
27b0: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
27c0: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
27d0: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
27e0: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27f0: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2800: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
2810: 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  t alone..**.** I
2820: 66 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74  f the bTryForInt
2830: 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74   flag is true, t
2840: 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74  hen extra effort
2850: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65   is made to give
2860: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72  .** an integer r
2870: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2880: 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f  Strings that loo
2890: 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20  k like floating 
28a0: 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20  point.** values 
28b0: 62 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e  but which have n
28c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d  o fractional com
28d0: 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a  ponent (example:
28e0: 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c   '48.00').** wil
28f0: 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74  l have a MEM_Int
2900: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2910: 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20  when bTryForInt 
2920: 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49  is true..**.** I
2930: 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  f bTryForInt is 
2940: 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74  false, then if t
2950: 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
2960: 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d  contains a decim
2970: 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65  al.** point or e
2980: 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74  xponential notat
2990: 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ion, the result 
29a0: 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c  is only MEM_Real
29b0: 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65  , even.** if the
29c0: 72 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69  re is an exact i
29d0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
29e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61  ation of the qua
29f0: 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntity..*/.static
2a00: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
2a10: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2a20: 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f  pRec, int bTryFo
2a30: 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20  rInt){.  double 
2a40: 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56  rValue;.  i64 iV
2a50: 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d  alue;.  u8 enc =
2a60: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73   pRec->enc;.  as
2a70: 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61  sert( (pRec->fla
2a80: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2a90: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
2aa0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69  ==MEM_Str );.  i
2ab0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2ac0: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2ad0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
2ae0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
2af0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2b00: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2b10: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
2b20: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2b30: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2b40: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2b60: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72  e{.    pRec->u.r
2b70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70   = rValue;.    p
2b80: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2b90: 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20  M_Real;.    if( 
2ba0: 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c  bTryForInt ) sql
2bb0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2bc0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2bd0: 20 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55   }.  /* TEXT->NU
2be0: 4d 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f  MERIC is many->o
2bf0: 6e 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69  ne.  Hence, it i
2c00: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69  s important to i
2c10: 6e 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20  nvalidate the.  
2c20: 2a 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ** string repres
2c30: 65 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63  entation after c
2c40: 6f 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72  omputing a numer
2c50: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62  ic equivalent, b
2c60: 65 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20  ecause the.  ** 
2c70: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2c80: 61 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20  ation might not 
2c90: 62 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c  be the canonical
2ca0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2cb0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d  for the.  ** num
2cc0: 65 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63  eric value.  Tic
2cd0: 6b 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64  ket [343634942dd
2ce0: 35 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31  54ab57b7024] 201
2cf0: 38 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52  8-01-31. */.  pR
2d00: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ec->flags &= ~ME
2d10: 4d 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  M_Str;.}../*.** 
2d20: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2d30: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2d40: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2d50: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2d60: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2d70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2d80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2d90: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
2da0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
2db0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2dc0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2dd0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2de0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2df0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2e00: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2e10: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2e20: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2e30: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2e40: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2e50: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2e60: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2e70: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2e80: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2e90: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
2ea0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2eb0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2ec0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2ed0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2ee0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2ef0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2f00: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2f10: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2f20: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a  QLITE_AFF_BLOB:.
2f30: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2f40: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2f50: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2f60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2f70: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2f80: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2f90: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
2fa0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
2fb0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2fc0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2fd0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2fe0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2ff0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
3000: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
3010: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
3020: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
3030: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
3040: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
3050: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
3060: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
3070: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
3080: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
3090: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
30a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
30b0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
30c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d0: 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  t)==0 ){ /*OPTIM
30e0: 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
30f0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  */.      if( (pR
3100: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3110: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
3120: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
3130: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
3140: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3150: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
3160: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
3180: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
3190: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
31a0: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
31b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
31d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
31e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
31f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
3200: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
3210: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
3220: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
3230: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
3240: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
3250: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
3260: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
3270: 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20  tion.  It would 
3280: 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72  be harmless to r
3290: 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72  epeat the conver
32a0: 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20  sion if .    ** 
32b0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
32c0: 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62   a string rep, b
32d0: 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65  ut it is pointle
32e0: 73 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73  ss to waste thos
32f0: 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63  e.    ** CPU cyc
3300: 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  les. */.    if( 
3310: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
3320: 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50  MEM_Str) ){ /*OP
3330: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3340: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  LSE*/.      if( 
3350: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
3360: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
3370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3380: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3390: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
33a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33b0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
33c0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
33d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a  EM_Int);.  }.}..
33e0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
33f0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3400: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3410: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3420: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3430: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3440: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3450: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3460: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3470: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3480: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3490: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
34a0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
34b0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
34c0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
34d0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
34e0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
34f0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3510: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3530: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3540: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3550: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3560: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3570: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3580: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3590: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
35a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
35b0: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
35c0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
35d0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
35e0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
35f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3600: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3610: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3620: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3630: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3640: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3650: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3660: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3670: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3680: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3690: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
36a0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
36b0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
36c0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
36d0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
36e0: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
36f0: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3700: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3710: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3720: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3730: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3740: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3750: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3760: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3770: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3780: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3790: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
37a0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
37b0: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
37c0: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
37d0: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
37e0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
37f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3800: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
3810: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
3820: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3830: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
3840: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
3850: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3860: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
3870: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3880: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
3890: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
38a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
38b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
38c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
38d0: 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20  Atoi64(pMem->z, 
38e0: 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d  &pMem->u.i, pMem
38f0: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3900: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3910: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
3920: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
3930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3940: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
3950: 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68  e for pMem, eith
3960: 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45  er MEM_Int or ME
3970: 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f  M_Real or both o
3980: 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a  r.** none.  .**.
3990: 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e  ** Unlike applyN
39a0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29  umericAffinity()
39b0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64  , this routine d
39c0: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70  oes not modify p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42  Mem->flags..** B
39e0: 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70  ut it does set p
39f0: 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65  Mem->u.r and pMe
3a00: 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61  m->u.i appropria
3a10: 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tely..*/.static 
3a20: 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28  u16 numericType(
3a30: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66  Mem *pMem){.  if
3a40: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3a50: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3a60: 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  l) ){.    return
3a70: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3a80: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3a90: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
3aa0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3ab0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70  .    return comp
3ad0: 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70  uteNumericType(p
3ae0: 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Mem);.  }.  retu
3af0: 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  rn 0;.}..#ifdef 
3b00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3b10: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
3b20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
3b30: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
3b40: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
3b50: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
3b60: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
3b70: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
3b80: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3b90: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
3ba0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
3bb0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
3bc0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
3bd0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
3be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3bf0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
3c00: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
3c10: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
3c20: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
3c30: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
3c40: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
3c50: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
3c60: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3c70: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
3c80: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3c90: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3ca0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3cb0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3cc0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3cd0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3ce0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3cf0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3d00: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3d10: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3d20: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3d30: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3d40: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3d50: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3d60: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3d70: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3d80: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
3d90: 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69  +) = c;.    sqli
3da0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3db0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3dc0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3dd0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3de0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3e00: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3e10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3e20: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3e30: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3e40: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3e50: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3e60: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3e70: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3e80: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3e90: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3ea0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3eb0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3ec0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3ed0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3ee0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3ef0: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3f00: 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28   z;.    }.    *(
3f10: 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20  zCsr++) = ']';. 
3f20: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a     if( f & MEM_Z
3f30: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
3f40: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3f50: 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70  0, zCsr,"+%dz",p
3f60: 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  Mem->u.nZero);. 
3f70: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3f80: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3f90: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3fa0: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3fb0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3fc0: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3fd0: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3fe0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3ff0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
4000: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
4010: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
4020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
4030: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
4040: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
4050: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
4060: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
4070: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
4080: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4090: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
40a0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
40b0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
40c0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
40d0: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
40e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
40f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
4100: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
4110: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
4120: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
4130: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
4140: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4150: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
4160: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
4170: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
4180: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
4190: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
41a0: 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72  ] = '[';.    for
41b0: 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c  (j=0; j<15 && j<
41c0: 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20  pMem->n; j++){. 
41d0: 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d       u8 c = pMem
41e0: 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[j];.      if
41f0: 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30  ( c>=0x20 && c<0
4200: 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  x7f ){.        z
4210: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20  Buf[k++] = c;.  
4220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4230: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4240: 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .';.      }.    
4250: 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  }.    zBuf[k++] 
4260: 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74  = ']';.    sqlit
4270: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4280: 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d  &zBuf[k], encnam
4290: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
42a0: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
42b0: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
42c0: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
42d0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ] = 0;.  }.}.#en
42e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
42f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50  TE_DEBUG./*.** P
4300: 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f  rint the value o
4310: 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72  f a register for
4320: 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65   tracing purpose
4330: 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s:.*/.static voi
4340: 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28  d memTracePrint(
4350: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
4360: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e  ->flags & MEM_Un
4370: 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70  defined ){.    p
4380: 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65  rintf(" undefine
4390: 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d");.  }else if(
43a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
43b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Null ){.    prin
43c0: 74 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  tf(p->flags & ME
43d0: 4d 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d  M_Zero ? " NULL-
43e0: 6e 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c  nochng" : " NULL
43f0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4400: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4410: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
4420: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
4430: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4440: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
4450: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
4460: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4470: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
4480: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
4490: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
44b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
44c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
44d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
44e0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
44f0: 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a  p->u.r);.#endif.
4500: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
4510: 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
4520: 65 74 28 70 29 20 29 7b 0a 20 20 20 20 70 72 69  et(p) ){.    pri
4530: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
4540: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
4550: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
4560: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
4570: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
4580: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
4590: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
45a0: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
45b0: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
45c0: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
45d0: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
45e0: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
45f0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
4600: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
4610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
4620: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
4630: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
4640: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
4650: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
4660: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
4670: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4680: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4690: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
46a0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
46b0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
46c0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
46d0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
46e0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
46f0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4700: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4710: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
4720: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
4730: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
4740: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
4750: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
4760: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
4770: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4780: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4790: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
47a0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
47b0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
47c0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
47d0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
47e0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
47f0: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4800: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4810: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
4820: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
4830: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
4840: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
4850: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
4860: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
4870: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4880: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4890: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
48a0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
48b0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
48c0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
48d0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
48e0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
48f0: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4900: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4910: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4920: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4930: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4940: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4950: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4960: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4970: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4980: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4990: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
49a0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
49b0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
49c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
49d0: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
49e0: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
49f0: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4a00: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4a10: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
4a20: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
4a30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
4a40: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
4a50: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
4a60: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
4a70: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4a80: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4a90: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4aa0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4ab0: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4ac0: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4ad0: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4ae0: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4af0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4b00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4b10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
4b20: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
4b30: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
4b40: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
4b50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4b60: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
4b70: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4b80: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4b90: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4ba0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4bb0: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4bc0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4bd0: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4be0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4bf0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4c00: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4c10: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
4c20: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4c30: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4c40: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
4c50: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
4c60: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
4c70: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4c80: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4c90: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4cb0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4cc0: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4cd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4ce0: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4cf0: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4d10: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
4d20: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
4d30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
4d40: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
4d50: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
4d60: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
4d70: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4d80: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4d90: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4da0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4db0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4dc0: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4dd0: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4de0: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4df0: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4e00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4e10: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
4e20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
4e30: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
4e40: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
4e50: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
4e60: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
4e70: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4e80: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4e90: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4ea0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4eb0: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4ec0: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4ed0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4ee0: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4ef0: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4f00: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4f10: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
4f20: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
4f30: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4f40: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
4f50: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
4f60: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
4f70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4f80: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4f90: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4fa0: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4fb0: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4fc0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4fd0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4fe0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4ff0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
5000: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
5010: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
5020: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
5030: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
5040: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
5050: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
5060: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
5070: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
5080: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
5090: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
50a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
50b0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
50c0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
50d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
50e0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
50f0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
5100: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
5110: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
5120: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
5130: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
5140: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
5150: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
5160: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
5170: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
5180: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
5190: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
51a0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
51b0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
51c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
51d0: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
51e0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
51f0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
5200: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
5210: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
5220: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
5230: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
5240: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
5250: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
5260: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
5270: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
5280: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
5290: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
52a0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
52b0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
52c0: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
52d0: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
52e0: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
52f0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
5300: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
5310: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
5320: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
5330: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
5340: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
5350: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
5360: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
5370: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
5380: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
5390: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
53a0: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
53b0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
53c0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
53d0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
53e0: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
53f0: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
5400: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
5410: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
5420: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
5430: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
5440: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
5450: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
5460: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
5470: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5480: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
5490: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
54a0: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
54b0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
54c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
54d0: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
54e0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
54f0: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
5500: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
5510: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
5520: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
5530: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
5540: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
5550: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
5560: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
5570: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
5580: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
5590: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
55a0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
55b0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
55c0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
55d0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
55e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
55f0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
5600: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
5610: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
5620: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
5630: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
5640: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
5650: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
5660: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
5670: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5690: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
56a0: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
56b0: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
56c0: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
56d0: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
56e0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
56f0: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5700: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5710: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
5720: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
5730: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5740: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5750: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
5760: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
5770: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5780: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5790: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
57a0: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
57b0: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
57c0: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
57d0: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
57e0: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
57f0: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5800: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5810: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
5820: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
5830: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
5840: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
5850: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
5860: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
5870: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5880: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5890: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
58a0: 43 6e 74 20 3f 20 73 71 6c 69 74 65 33 4e 50 72  Cnt ? sqlite3NPr
58b0: 6f 66 69 6c 65 43 6e 74 20 3a 20 73 71 6c 69 74  ofileCnt : sqlit
58c0: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
58d0: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
58e0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
58f0: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
5900: 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70  STATUS.    if( p
5910: 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e  ->anExec ) p->an
5920: 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61  Exec[(int)(pOp-a
5930: 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  Op)]++;.#endif..
5940: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
5950: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
5960: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
5970: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
5980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5990: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
59a0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
59b0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
59c0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
59d0: 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28  p(stdout, (int)(
59e0: 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29  pOp - aOp), pOp)
59f0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5a00: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
5a10: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
5a20: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
5a30: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
5a40: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
5a50: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
5a60: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
5a70: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
5a80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5a90: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
5aa0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5ab0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
5ac0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5ad0: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
5ae0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5af0: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5b00: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5b10: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5b20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5b30: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53  #endif..    /* S
5b40: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5b50: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
5b60: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5b70: 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20  E_DEBUG.    {.  
5b80: 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74      u8 opPropert
5b90: 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  y = sqlite3Opcod
5ba0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5bb0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66  pcode];.      if
5bc0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5bd0: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5be0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5bf0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
5c00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5c10: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
5c20: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5c30: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5c40: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5c50: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5c60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5c70: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5c80: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
5c90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5ca0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5cb0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
5cc0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5cd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5ce0: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5cf0: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5d00: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5d10: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5d20: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5d30: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5d40: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5d50: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5d60: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5d70: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
5d80: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5d90: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5da0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5db0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  s(&aMem[pOp->p2]
5dc0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5dd0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5de0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5df0: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
5e00: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5e10: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5e20: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5e30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5e40: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5e50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5e60: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5e70: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5e80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5e90: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5ea0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3]) );.        a
5eb0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5ec0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5ed0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5ee0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
5ef0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5f00: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
5f10: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
5f20: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5f30: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
5f40: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5f50: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5f60: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5f70: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5f80: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5f90: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5fa0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5fb0: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
5fc0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
5fd0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5fe0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5ff0: 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT3)!=0 ){.    
6000: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
6010: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
6020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6030: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6040: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6050: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
6060: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
6070: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
6080: 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a   }.    }.#endif.
6090: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
60a0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
60b0: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
60c0: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
60d0: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
60e0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
60f0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
6150: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
6160: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
6170: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
6180: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
6190: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
61a0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
61b0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
61c0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
61d0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
61e0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
61f0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
6200: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
6210: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
6220: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
6230: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
6240: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
6250: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
6260: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
6270: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
6280: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
6290: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
62a0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
62b0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
62c0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
62d0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
62e0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
62f0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
6300: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
6310: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
6320: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
6330: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
6340: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
6350: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
6360: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
6370: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
6380: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
6390: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
63a0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
63b0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
63c0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
63d0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
63e0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
63f0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
6400: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
6410: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
6420: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
6430: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
6440: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
6450: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
6460: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
6470: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
6480: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
6490: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
64a0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
64b0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
64c0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
64d0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
64e0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
64f0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
6500: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
6510: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
6520: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
6530: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
6540: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
6550: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
6560: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
6570: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
6580: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6590: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
65a0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
65b0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
65c0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
65d0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
65e0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
65f0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
6600: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
6610: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
6620: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
6630: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
6640: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
6650: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
6660: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
6670: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
6680: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
6690: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
66a0: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
66b0: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
66c0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
66d0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
66e0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
66f0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
6700: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
6710: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
6720: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
6730: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
6740: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
6750: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
6760: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
6770: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
6780: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
6790: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
67a0: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
67b0: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
67c0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
67d0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
67e0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
67f0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6800: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6850: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6860: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6870: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6880: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6890: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
68a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
68b0: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
68c0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
68d0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
68e0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
68f0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
6900: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
6910: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
6920: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
6930: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
6940: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
6950: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6960: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6970: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6980: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6990: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
69a0: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
69b0: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
69c0: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
69d0: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
69e0: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
69f0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6a00: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
6a10: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
6a20: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
6a30: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6a40: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
6a50: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6a60: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6a70: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6a80: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6a90: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6aa0: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6ab0: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6ac0: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6ad0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6ae0: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6af0: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6b00: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6b10: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6b20: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6b30: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6b40: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
6b50: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6b60: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
6b70: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
6b80: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
6b90: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
6ba0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
6bb0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
6bc0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
6bd0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6be0: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6bf0: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6c00: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6c10: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6c20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6c30: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6c40: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
6c50: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
6c60: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
6c70: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
6c80: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
6c90: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
6ca0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
6cb0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
6cc0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
6cd0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6ce0: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6cf0: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6d00: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6d10: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6d20: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6d30: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6d40: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
6d50: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
6d60: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
6d70: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
6d80: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
6d90: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
6da0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
6db0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
6dc0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
6dd0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6de0: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6df0: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6e00: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6e10: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6e20: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6e30: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6e40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6e50: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
6e60: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
6e70: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
6e80: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
6e90: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
6ea0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
6eb0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6ec0: 73 73 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78  ssLimit && db->x
6ed0: 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20  Progress!=0 ){. 
6ee0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6ef0: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6f00: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6f10: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6f20: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6f30: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6f40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
6f50: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
6f60: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6f70: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
6f80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
6f90: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
6fa0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6fb0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
6fc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
6fd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6fe0: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6ff0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
7000: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
7010: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
7020: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
7030: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
7040: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
7050: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
7060: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
7070: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7080: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
7090: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
70a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
70b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
70c0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
70d0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
70e0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
70f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
7100: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
7110: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7120: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7130: 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20  nt)(pOp-aOp);.  
7140: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7150: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a  Op->p1, pIn1);..
7160: 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f    /* Most jump o
7170: 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67  perations do a g
7180: 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74  oto to this spot
7190: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
71a0: 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70  ate.  ** the pOp
71b0: 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d   pointer. */.jum
71c0: 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d  p_to_p2:.  pOp =
71d0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
71e0: 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1];.  break;.}..
71f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
7200: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
7210: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7220: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7230: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
7240: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
7250: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
7260: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
7270: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
7280: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
7290: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
72a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
72b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
72c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
72d0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
72e0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20  EM_Int );.  pOp 
72f0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7300: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
7310: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
7320: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7330: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
7340: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
7350: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
7360: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
7370: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
7380: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
7390: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
73a0: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
73b0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
73c0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
73d0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
73e0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
73f0: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
7400: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
7410: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
7420: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
7430: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
7440: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
7450: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
7460: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
7470: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
7480: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
7490: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
74a0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
74b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
74c0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
74d0: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
74e0: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
74f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
7500: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
7510: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
7520: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7530: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
7540: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
7550: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
7560: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
7570: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7580: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
7590: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
75a0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
75b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
75c0: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
75d0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
75e0: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
75f0: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
7600: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
7610: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
7620: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
7630: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
7640: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
7650: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
7660: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
7670: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
7680: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
7690: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
76a0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
76b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
76c0: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
76d0: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
76e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
76f0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7700: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7710: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7720: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
7730: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
7740: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
7750: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
7760: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
7770: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
7780: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
7790: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
77a0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
77b0: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
77c0: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
77d0: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
77e0: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
77f0: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7800: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
7810: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
7820: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
7830: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
7840: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
7850: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
7860: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
7870: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
7880: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
7890: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
78a0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
78b0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
78c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
78d0: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
78e0: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
78f0: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7900: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7910: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7920: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7930: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7940: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7950: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
7960: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
7970: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
7980: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
7990: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
79a0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
79b0: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
79c0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
79d0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
79e0: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
79f0: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7a00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7a10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7a20: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7a30: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7a40: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7a50: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
7a60: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
7a70: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
7a80: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7a90: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
7aa0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
7ab0: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
7ac0: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
7ad0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7ae0: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7af0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7b00: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
7b10: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
7b20: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
7b30: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7b40: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
7b50: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
7b60: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
7b70: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
7b80: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
7b90: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
7ba0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
7bb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7bc0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
7bd0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7be0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
7bf0: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
7c00: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
7c10: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
7c20: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
7c30: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
7c40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
7c50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
7c60: 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  UG.  if( pOp->p2
7c70: 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20 73 71  ==OE_Abort ){ sq
7c80: 6c 69 74 65 33 56 64 62 65 41 73 73 65 72 74 41  lite3VdbeAssertA
7c90: 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23  bortable(p); }.#
7ca0: 65 6e 64 69 66 0a 20 20 69 66 28 20 28 70 49 6e  endif.  if( (pIn
7cb0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7cc0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7cd0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7ce0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7cf0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7d00: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7d10: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7d20: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7d30: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7d40: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7d50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7d60: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7d70: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7d80: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7d90: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
7da0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7db0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7dc0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7dd0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7de0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7df0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7e00: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7e10: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7e20: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7e30: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7e40: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7e50: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7e60: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7e70: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7e80: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7e90: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
7ea0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7eb0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7ec0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7ed0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7ee0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7ef0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7f00: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7f10: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7f20: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7f30: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7f50: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7f60: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7f70: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7f80: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7f90: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
7fa0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7fb0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7fc0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7fd0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7fe0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7ff0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
8000: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
8010: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
8020: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
8030: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
8040: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
8050: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8060: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
8070: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
8080: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8090: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
80a0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
80b0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
80c0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
80d0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
80e0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
80f0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
8100: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
8110: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
8120: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
8130: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
8140: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
8150: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
8160: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
8170: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
8180: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
8190: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
81a0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
81b0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
81c0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
81d0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
81e0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 23 69 66 64  pOp - aOp);.#ifd
81f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8200: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
8210: 45 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74  E_Abort ){ sqlit
8220: 65 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72  e3VdbeAssertAbor
8230: 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64  table(p); }.#end
8240: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
8250: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
8260: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
8270: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
8280: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
8290: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
82a0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
82b0: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
82c0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
82d0: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
82e0: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
82f0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
8300: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
8310: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
8320: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
8330: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
8340: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
8350: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
8360: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
8370: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
8380: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
8390: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
83a0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
83b0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
83c0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
83d0: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
83e0: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
83f0: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
8400: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
8410: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
8420: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
8430: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
8440: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
8450: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
8460: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
8470: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
8480: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
8490: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
84a0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
84b0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
84c0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
84d0: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
84e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
84f0: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
8500: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
8510: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
8520: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
8530: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
8540: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
8550: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
8560: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
8570: 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  cx;.  assert( pO
8580: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66  p->p5<=4 );.  if
8590: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
85a0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
85b0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
85c0: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
85d0: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
85e0: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
85f0: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
8630: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65  KEY" };.      te
8640: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8650: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
8660: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
8670: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
8680: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
8690: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
86a0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
86b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
86c0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
86d0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
86e0: 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  , azType[pOp->p5
86f0: 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  -1]);.      if( 
8700: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
8710: 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20       p->zErrMsg 
8720: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
8730: 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70  (db, "%z: %s", p
8740: 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e  ->zErrMsg, pOp->
8750: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p4.z);.      }. 
8760: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8770: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8780: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
8790: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
87a0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
87b0: 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25  >p1, "abort at %
87c0: 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20  d in [%s]: %s", 
87d0: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
87e0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
87f0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8800: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
8810: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
8820: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
8830: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8840: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
8850: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8860: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
8870: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
8880: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
8890: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88a0: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
88b0: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
88c0: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
88d0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88e0: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
88f0: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
8900: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
8910: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
8920: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
8930: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
8940: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
8950: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8960: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
8970: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8980: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8990: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
89a0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
89b0: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
89c0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
89d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
89e0: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
89f0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
8a00: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a10: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a20: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
8a30: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8a40: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
8a50: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8a60: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8a70: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8a80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8a90: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8aa0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8ab0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8ac0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8ad0: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
8ae0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8af0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8b00: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8b10: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8b20: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
8b30: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
8b40: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8b50: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8b60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8b70: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8b80: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8b90: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8ba0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8bb0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8bc0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
8bd0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
8be0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
8bf0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
8c00: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8c10: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
8c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8c30: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
8c40: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8c50: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8c60: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8c70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
8c80: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
8c90: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
8ca0: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
8cb0: 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e  ut->u.r = *pOp->
8cc0: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
8cd0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
8ce0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
8cf0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8d00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
8d10: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
8d20: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
8d30: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
8d40: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
8d50: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
8d60: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
8d70: 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65  ng opcode before
8d80: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
8d90: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
8da0: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
8db0: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
8dc0: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
8dd0: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
8de0: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
8df0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
8e00: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
8e10: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
8e20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8e30: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
8e40: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
8e50: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8e60: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8e70: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8e80: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8e90: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8ea0: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8eb0: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8ec0: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
8ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8ee0: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
8ef0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
8f00: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
8f10: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
8f20: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
8f30: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
8f40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8f50: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8f60: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
8f70: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8f80: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8f90: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8fa0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8fb0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8fc0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8fd0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8fe0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
8ff0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
9000: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
9010: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
9020: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
9030: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
9040: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
9050: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
9060: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
9070: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
9080: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
9090: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
90a0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
90b0: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
90c0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
90d0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
90e0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
90f0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
9100: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
9110: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
9120: 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  G );.#endif.  if
9130: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
9140: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
9150: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
9160: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9170: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d   }.  assert( rc=
9180: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
9190: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
91a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
91b0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
91c0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
91d0: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
91e0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
91f0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
9200: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
9210: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
9220: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
9230: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
9240: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9250: 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
9260: 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63  t zero and the c
9270: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
9280: 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74  er P3 is equal t
9290: 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  o P5, then.** th
92a0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
92b0: 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  e register P2 is
92c0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c   converted to BL
92d0: 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  OB.  The content
92e0: 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20   is.** the same 
92f0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
9300: 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20  s, it is merely 
9310: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
9320: 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a   BLOB instead.**
9330: 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73   of a string, as
9340: 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20   if it had been 
9350: 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20  CAST.  In other 
9360: 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28  words:.**.** if(
9370: 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50   P3!=0 and reg[P
9380: 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d  3]==P5 ) reg[P2]
9390: 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d   := CAST(reg[P2]
93a0: 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73   as BLOB).*/.cas
93b0: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
93c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
93d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
93e0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
93f0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9400: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9410: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9420: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
9430: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
9440: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
9450: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
9460: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
9470: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9480: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9490: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e  SIZE(pOut);.#ifn
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f  def SQLITE_LIKE_
94b0: 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f  DOESNT_MATCH_BLO
94c0: 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  BS.  if( pOp->p3
94d0: 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >0 ){.    assert
94e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
94f0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9500: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
9510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9520: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9530: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
9540: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
9550: 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70  In3->u.i==pOp->p
9560: 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  5 ) pOut->flags 
9570: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
9580: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
9590: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65    }.#endif.  bre
95a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
95b0: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
95c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
95d0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
95e0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
95f0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9600: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
9610: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
9620: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
9630: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
9640: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
9650: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
9660: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
9670: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
9680: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
9690: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
96a0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
96b0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
96c0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
96d0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
96e0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
96f0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
9700: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
9710: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
9720: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
9730: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
9740: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
9750: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
9760: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
9770: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
9780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9790: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
97a0: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
97b0: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
97c0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
97d0: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
97e0: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
97f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9800: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9810: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
9820: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
9830: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
9840: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
9850: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
9860: 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ull;.  pOut->n =
9870: 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
9880: 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e  E_DEBUG.  pOut->
9890: 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64 69  uTemp = 0;.#endi
98a0: 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  f.  while( cnt>0
98b0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
98c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
98d0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
98e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
98f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9900: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
9910: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
9920: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pOut->n = 0;.   
9930: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
9940: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9950: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
9960: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9970: 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  is: r[P1]=NULL.*
9980: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
9990: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
99a0: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
99b0: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
99c0: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
99d0: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
99e0: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
99f0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
9a00: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
9a10: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
9a20: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
9a30: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
9a40: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
9a50: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
9a60: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
9a70: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9a80: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9a90: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9aa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9ab0: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
9ac0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
9ad0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
9ae0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9af0: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
9b00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9b10: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pOut->flags = (p
9b20: 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d  Out->flags&~(MEM
9b30: 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41  _Undefined|MEM_A
9b40: 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c  ffMask))|MEM_Nul
9b50: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  l;.  break;.}../
9b60: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
9b70: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9b80: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9b90: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9ba0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
9bb0: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
9bc0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
9bd0: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
9be0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9bf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
9c00: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
9c10: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
9c20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
9c30: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
9c40: 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  GTH );.  pOut = 
9c50: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9c60: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
9c70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
9c80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
9c90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
9ca0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9cb0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9cc0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9cd0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9ce0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
9cf0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
9d00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9d10: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
9d20: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
9d30: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
9d40: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
9d50: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9d60: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
9d70: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
9d80: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
9d90: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
9da0: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
9db0: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
9dc0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9dd0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
9de0: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
9df0: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
9e00: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65   /* out2 */.  Me
9e10: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
9e20: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
9e30: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
9e40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9e50: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
9e60: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
9e70: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
9e80: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71  || pOp->p4.z==sq
9e90: 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
9ea0: 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f  ame(p->pVList,pO
9eb0: 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72  p->p1) );.  pVar
9ec0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9ed0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9ee0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9ef0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9f00: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9f10: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
9f20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
9f30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9f40: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9f50: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
9f60: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9f70: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9f80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9f90: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9fa0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9fb0: 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b  sis: r[P2@P3]=r[
9fc0: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9fd0: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9fe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9ff0: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
a000: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
a010: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
a020: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
a030: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
a040: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
a050: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
a060: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
a070: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
a080: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
a090: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
a0a0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
a0b0: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
a0c0: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
a0d0: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
a0e0: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
a0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
a100: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
a110: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
a120: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
a130: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
a140: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
a150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a160: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
a170: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
a180: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
a190: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
a1a0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
a1b0: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
a1c0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a1d0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
a1e0: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
a1f0: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
a200: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
a210: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
a220: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
a230: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a240: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
a250: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
a260: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
a270: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
a280: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a290: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
a2a0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
a2b0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
a2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a2d0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
a2e0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
a2f0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
a300: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
a310: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
a320: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
a330: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
a340: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
a350: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
a360: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
a370: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
a380: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
a390: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
a3a0: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
a3b0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
a3c0: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
a3d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a3e0: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
a3f0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a400: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
a410: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
a420: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
a430: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
a440: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
a450: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
a460: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
a470: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
a480: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
a490: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
a4a0: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
a4b0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
a4c0: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
a4d0: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
a4e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
a4f0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
a500: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
a510: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a520: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
a530: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a540: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
a550: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
a560: 31 20 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  1 ){.    memAbou
a570: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
a580: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
a590: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
a5a0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
a5b0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
a5c0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
a5d0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
a5e0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
a5f0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
a600: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a610: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a620: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a630: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a640: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a650: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a660: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a670: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a680: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a6a0: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a6b0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a6c0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a6d0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a6e0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a6f0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a700: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a710: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a720: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a730: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a740: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a750: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a760: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a770: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a780: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a790: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a7a0: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a7b0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a7c0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a7d0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a7e0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a7f0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a800: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a810: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a820: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a830: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a840: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a850: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a860: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a870: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a880: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a890: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a8a0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a8b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a8c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a8d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a8f0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a900: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a910: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a920: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a930: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a940: 47 0a 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  G.  pOut->pScopy
a950: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70  From = pIn1;.  p
a960: 4f 75 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73  Out->mScopyFlags
a970: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
a980: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a9a0: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a9b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a9c0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a9d0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a9e0: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a9f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
aa00: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
aa10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
aa20: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
aa30: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
aa40: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
aa50: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
aa60: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
aa70: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
aa80: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
aa90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
aaa0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
aab0: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
aac0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
aad0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
aae0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
aaf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
ab00: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
ab10: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
ab20: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
ab30: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
ab40: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ab50: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
ab60: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
ab70: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
ab80: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
ab90: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
aba0: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
abb0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
abc0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
abd0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
abe0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
abf0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
ac00: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
ac10: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
ac20: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
ac30: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
ac40: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
ac50: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
ac60: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
ac70: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
ac80: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
ac90: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
aca0: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
acb0: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
acc0: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
acd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
ace0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
acf0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
ad00: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
ad10: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
ad20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ad30: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
ad40: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
ad50: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
ad60: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
ad70: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
ad80: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
ad90: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
ada0: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
adb0: 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  t .   && db->xPr
adc0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
add0: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
ade0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
adf0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
ae00: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
ae10: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
ae20: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
ae30: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
ae40: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
ae50: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
ae60: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
ae70: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
ae80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
ae90: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
aea0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
aeb0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
aec0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
aed0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
aee0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
aef0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
af00: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
af10: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
af20: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
af30: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
af40: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
af50: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
af60: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
af70: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
af80: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
af90: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
afa0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
afb0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
afc0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
afd0: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
afe0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
aff0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
b000: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
b010: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
b020: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
b030: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
b040: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
b050: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
b060: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
b070: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
b080: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
b090: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
b0a0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
b0b0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
b0c0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
b0d0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
b0e0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
b0f0: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
b100: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
b110: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
b120: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
b130: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
b140: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b150: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
b160: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
b170: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
b180: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
b190: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
b1a0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
b1b0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
b1c0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
b1d0: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
b1e0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
b1f0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
b200: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
b210: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
b220: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
b230: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
b240: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
b250: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b260: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
b270: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
b280: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
b290: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
b2a0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
b2b0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
b2c0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
b2d0: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
b2e0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
b2f0: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
b300: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
b310: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
b320: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
b330: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
b340: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
b350: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
b360: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
b370: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
b380: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
b390: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
b3a0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
b3b0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
b3c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
b3d0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
b3e0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
b3f0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
b400: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
b410: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
b420: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
b430: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
b440: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
b450: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
b460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
b470: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
b480: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
b490: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
b4a0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
b4b0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
b4c0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
b4d0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
b4e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
b4f0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
b500: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
b510: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
b520: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
b530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b540: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
b550: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
b560: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b570: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
b580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
b590: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
b5a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69  oto no_mem;..  i
b5b0: 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20  f( db->mTrace & 
b5c0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
b5d0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
b5e0: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
b5f0: 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  ROW, db->pTraceA
b600: 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a  rg, p, 0);.  }..
b610: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
b620: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
b630: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
b640: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
b650: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
b660: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
b670: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
b680: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
b690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b6a0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
b6b0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
b6c0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
b6d0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
b6e0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
b6f0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
b700: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b710: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b720: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b730: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
b740: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
b750: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
b760: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
b770: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
b780: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
b790: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
b7a0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
b7b0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
b7c0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
b7d0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
b7e0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
b7f0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
b800: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
b810: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
b820: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
b830: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b840: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
b850: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b860: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
b870: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b880: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b890: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8a0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b8b0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
b8c0: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
b8d0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
b8e0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b8f0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
b900: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b910: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b920: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
b930: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
b940: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
b950: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
b960: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
b970: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
b980: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
b990: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
b9a0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
b9b0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
b9c0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
b9d0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
b9e0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
b9f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
ba00: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
ba10: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
ba20: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
ba30: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
ba40: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
ba50: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
ba60: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ba70: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
ba80: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
ba90: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
baa0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
bab0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
bac0: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
bad0: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
bae0: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
baf0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
bb00: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
bb10: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
bb20: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
bb30: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
bb40: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
bb50: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
bb60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
bb70: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
bb80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bb90: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
bba0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bbb0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
bbc0: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
bbd0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bbe0: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
bbf0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
bc00: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
bc10: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bc20: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bc30: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bc40: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bc50: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bc60: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
bc70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bc80: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bc90: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
bca0: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
bcb0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bcc0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
bcd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bce0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
bcf0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
bd00: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
bd10: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
bd20: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
bd30: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
bd40: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
bd50: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bd60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bd70: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
bd80: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
bd90: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bda0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
bdb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bdc0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
bdd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bde0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bdf0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
be00: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
be10: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
be20: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
be30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
be40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
be50: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
be60: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
be70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
be80: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
be90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
bea0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
beb0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bec0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
bed0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
bee0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
bef0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
bf00: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
bf10: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
bf20: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
bf30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bf40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bf50: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
bf60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bf70: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
bf80: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
bf90: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
bfa0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
bfb0: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
bfc0: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
bfd0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
bfe0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bff0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c000: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
c010: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c020: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
c030: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
c040: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
c050: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
c060: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c070: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c0a0: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
c0b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c0c0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
c0d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c0e0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
c0f0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c100: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c120: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
c130: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c140: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
c150: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
c160: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c170: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
c180: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c190: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c1b0: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
c1c0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
c1d0: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
c1e0: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
c1f0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
c200: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
c210: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
c220: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
c230: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
c240: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
c250: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
c260: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
c270: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
c280: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
c290: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
c2a0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c2b0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
c2c0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
c2d0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
c2e0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
c2f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
c300: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
c310: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
c320: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
c330: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
c340: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
c350: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
c360: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
c370: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
c380: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
c390: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c3a0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
c3b0: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
c3c0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
c3d0: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
c3e0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
c3f0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
c400: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
c410: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
c420: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
c430: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
c440: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
c450: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
c460: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
c470: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
c480: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
c490: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c4a0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c4b0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c4c0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
c4d0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
c4e0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c4f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c500: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c510: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
c520: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
c530: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
c540: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c550: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
c560: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
c570: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
c580: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
c590: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c5a0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
c5b0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c5c0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c5d0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c5e0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c5f0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
c600: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
c610: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
c620: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
c630: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c640: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
c650: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c660: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c670: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c680: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c690: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c6a0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
c6b0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
c6c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c6d0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c6e0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
c6f0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c700: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
c710: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
c720: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
c730: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c740: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c750: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
c760: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
c770: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
c780: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
c790: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
c7a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c7b0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
c7c0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c7d0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
c7e0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c7f0: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
c800: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c810: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c820: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
c830: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c840: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
c850: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
c860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c870: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
c880: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
c890: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
c8a0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
c8b0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c8c0: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
c8d0: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
c8e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c8f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c900: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
c910: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
c920: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c930: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
c940: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
c950: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
c960: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
c970: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c980: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c990: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c9a0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c9b0: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
c9c0: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
c9d0: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
c9e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c9f0: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
ca10: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
ca20: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
ca30: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ca40: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ca50: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
ca60: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
ca70: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
ca80: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
ca90: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
caa0: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
cab0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
cac0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
cad0: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
cae0: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
caf0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
cb00: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
cb10: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
cb20: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
cb30: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
cb40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
cb50: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
cb60: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
cb70: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
cb80: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
cb90: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
cba0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
cbb0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
cbc0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
cbd0: 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68  eq object. If th
cbe0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
cbf0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
cc00: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
cc10: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
cc20: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
cc30: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
cc40: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
cc50: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
cc60: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
cc70: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
cc80: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
cc90: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
cca0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
ccb0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
ccc0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
ccd0: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
cce0: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
ccf0: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
cd00: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
cd10: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
cd20: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
cd30: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
cd40: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
cd50: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
cd60: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
cd70: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
cd80: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
cd90: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
cda0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
cdb0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
cdc0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
cdd0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
cde0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
cdf0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
ce00: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
ce10: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20  le.** publicly. 
ce20: 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66   Only built-in f
ce30: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63  unctions have ac
ce40: 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61  cess to this fea
ce50: 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
ce60: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
ce70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ce80: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
ce90: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
cea0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
ceb0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
cec0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
ced0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
cee0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
cef0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
cf00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cf10: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
cf20: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
cf30: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
cf40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
cf50: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
cf60: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
cf70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cf80: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cf90: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cfa0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cfb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
cfc0: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
cfd0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cfe0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
cff0: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
d000: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
d010: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
d020: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d030: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d040: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d050: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d060: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d070: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d080: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d090: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d0a0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
d0b0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d0c0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
d0d0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
d0e0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
d0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
d100: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
d110: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
d120: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
d130: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
d140: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d150: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
d160: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d170: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d180: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d190: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d1a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d1b0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
d1c0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d1d0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
d1e0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
d1f0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d200: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d210: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
d220: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
d230: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
d240: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
d250: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
d260: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
d270: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d280: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d290: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d2a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d2b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d2c0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d2e0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
d2f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d300: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
d310: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d320: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d330: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
d340: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
d350: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
d360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d370: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
d380: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d390: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
d3a0: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
d3b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d3c0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
d3d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
d3e0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
d3f0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
d400: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
d410: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
d420: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
d430: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
d440: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d450: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d460: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
d470: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
d480: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
d490: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
d4a0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
d4b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
d4c0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
d4d0: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
d4e0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
d4f0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
d500: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
d510: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
d520: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
d530: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
d540: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
d550: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
d560: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
d570: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
d580: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
d590: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
d5a0: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
d5b0: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
d5c0: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
d5d0: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
d5e0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
d5f0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
d600: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
d610: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
d620: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
d630: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
d640: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
d650: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
d660: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
d670: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
d680: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
d690: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
d6a0: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
d6b0: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
d6c0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
d6d0: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
d6e0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
d6f0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
d700: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
d710: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
d720: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
d730: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
d740: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
d750: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
d760: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
d770: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
d780: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
d790: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
d7a0: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
d7b0: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
d7c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
d7d0: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
d7e0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
d7f0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
d800: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
d810: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d820: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d830: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
d840: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
d850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d860: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d870: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d880: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d890: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d8a0: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d8b0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d8c0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d8d0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d8e0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d8f0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d900: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d910: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d920: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d930: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d940: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d950: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d960: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d970: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d980: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d990: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d9a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d9b0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d9c0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d9d0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d9e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d9f0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
da00: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
da10: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
da20: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
da30: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
da40: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
da50: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
da60: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
da70: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
da80: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
da90: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
daa0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
dab0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
dac0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
dad0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
dae0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
daf0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db00: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
db10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
db20: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
db30: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
db40: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
db50: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
db60: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
db70: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
db80: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
db90: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
dba0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
dbb0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
dbc0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
dbd0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
dbe0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
dbf0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
dc00: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
dc10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dc20: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
dc30: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
dc40: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
dc50: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
dc60: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
dc70: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
dc80: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
dc90: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
dca0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
dcb0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
dcc0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
dcd0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
dce0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
dcf0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
dd00: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
dd10: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
dd20: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
dd30: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
dd40: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
dd50: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
dd60: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
dd70: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
dd80: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
dd90: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
dda0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
ddb0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
ddc0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
ddd0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
dde0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ddf0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
de00: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
de10: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
de20: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
de30: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
de40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
de50: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
de60: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
de70: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
de80: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
de90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
dea0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
deb0: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
dec0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
ded0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
dee0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
def0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
df00: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
df10: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
df20: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
df30: 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41  >.** <li> P2=='A
df40: 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a  ' &rarr; BLOB.**
df50: 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72   <li> P2=='B' &r
df60: 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  arr; TEXT.** <li
df70: 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b  > P2=='C' &rarr;
df80: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e   NUMERIC.** <li>
df90: 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20   P2=='D' &rarr; 
dfa0: 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20  INTEGER.** <li> 
dfb0: 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52  P2=='E' &rarr; R
dfc0: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
dfd0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
dfe0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
dff0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
e000: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
e010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
e020: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e030: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e040: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e050: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
e060: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
e070: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e080: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e090: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0a0: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
e0b0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e0c0: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
e0d0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e0e0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0f0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
e100: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e110: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
e120: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
e130: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e140: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e150: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e160: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
e170: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e180: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
e190: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
e1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
e1b0: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
e1c0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
e1d0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
e1e0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
e1f0: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
e200: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
e210: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e220: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
e230: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
e240: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
e250: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e260: 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50  s: IF r[P3]==r[P
e270: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
e280: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
e290: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
e2a0: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d  3.  If reg(P3)==
e2b0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e2c0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e2d0: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
e2e0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
e2f0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  ag is set in P5,
e300: 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74   then.** store t
e310: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e320: 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73  parison in regis
e330: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
e340: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e350: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e360: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e370: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e380: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e390: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e3a0: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e3b0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e3c0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e3d0: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e3e0: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e3f0: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e400: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e410: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e420: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e430: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e440: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e450: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e460: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e470: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e480: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
e490: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
e4a0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e4b0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
e4c0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
e4d0: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
e4e0: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
e4f0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e500: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
e510: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
e520: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
e530: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e540: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e550: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e560: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e570: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e580: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e590: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e5a0: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e5b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e5c0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e5d0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e5e0: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e5f0: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e600: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e610: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e620: 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65  s used to do the
e630: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e640: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e650: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e660: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e670: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e680: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e690: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e6a0: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e6b0: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e6c0: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e6d0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e6e0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e6f0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e700: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e710: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e720: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e730: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e740: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e750: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  s..**.** If SQLI
e760: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e770: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e780: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e790: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e7a0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e7b0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e7c0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e7d0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e7e0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e7f0: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e800: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
e810: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e820: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e830: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
e840: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
e850: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e860: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e870: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e880: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e890: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e8a0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e8b0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a  d from P5..**.**
e8c0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e8d0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e8e0: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e8f0: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e900: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e910: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e920: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e930: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e940: 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a  or 0 (false)..**
e950: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
e960: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
e970: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
e980: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
e990: 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20  1 (true)..*/./* 
e9a0: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e9b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e9c0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21  opsis: IF r[P3]!
e9d0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
e9e0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e9f0: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
ea00: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ea10: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ea20: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
ea30: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
ea40: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
ea50: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
ea60: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
ea70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ea80: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
ea90: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
eaa0: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
eab0: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
eac0: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
ead0: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
eae0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
eaf0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
eb00: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
eb10: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e   1 (true)..** In
eb20: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
eb30: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
eb40: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
eb50: 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28  erwritten by 0 (
eb60: 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  false)..*/./* Op
eb70: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
eb80: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eb90: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b  sis: IF r[P3]<r[
eba0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
ebb0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ebc0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ebd0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
ebe0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
ebf0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
ec00: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
ec10: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
ec20: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  ag is set in P5 
ec30: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73  store.** the res
ec40: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
ec50: 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c  n (0 or 1 or NUL
ec60: 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  L) into register
ec70: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
ec80: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ec90: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
eca0: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
ecb0: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
ecc0: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
ecd0: 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20  en the take the 
ece0: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
ecf0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
ed00: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
ed10: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
ed20: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
ed30: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
ed40: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ed50: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
ed60: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
ed70: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
ed80: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
ed90: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
eda0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
edb0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
edc0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
edd0: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
ede0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
edf0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
ee00: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
ee10: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
ee20: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
ee30: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
ee40: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
ee50: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
ee60: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
ee70: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
ee80: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
ee90: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
eea0: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
eeb0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
eec0: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
eed0: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
eee0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
eef0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
ef00: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
ef10: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
ef20: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
ef30: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
ef40: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
ef50: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
ef60: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
ef70: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ef80: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
ef90: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
efa0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
efb0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
efc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
efd0: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
efe0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
eff0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
f000: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
f010: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
f020: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
f030: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
f040: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
f050: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
f060: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
f070: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
f080: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
f090: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
f0a0: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
f0b0: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
f0c0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
f0d0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
f0e0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
f0f0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
f100: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
f110: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f120: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
f130: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
f140: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f150: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20  an blobs..*/./* 
f160: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
f170: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f180: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
f190: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
f1a0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f1b0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f1c0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f1d0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f1e0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f1f0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f200: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f210: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f220: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f230: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f240: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f250: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f260: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f270: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f280: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f290: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31  s: IF r[P3]>r[P1
f2a0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
f2b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f2c0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f2d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f2e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f2f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f300: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
f310: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
f320: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f330: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f340: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f350: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f360: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f370: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
f380: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f390: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72  sis: IF r[P3]>=r
f3a0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f3b0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f3c0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f3d0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f3e0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f3f0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f400: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f410: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f420: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f430: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
f440: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
f450: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
f460: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f470: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
f480: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
f490: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f4a0: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
f4b0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f4c0: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
f4d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f4e0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
f4f0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
f500: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f510: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
f520: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f530: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f550: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f560: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f570: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f590: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f5a0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f5b0: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f5d0: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f5e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f5f0: 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20  int res, res2;  
f600: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f610: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f620: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f630: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f640: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f650: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
f660: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
f670: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
f680: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f690: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f6a0: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
f6b0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
f6c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f6d0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f6e0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
f6f0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
f700: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f710: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
f720: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
f730: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
f740: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
f750: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
f760: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
f770: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f780: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
f790: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f7a0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
f7b0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
f7c0: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
f7d0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f7e0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
f7f0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
f800: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
f810: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
f820: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
f830: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
f840: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f850: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
f860: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
f870: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
f880: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
f890: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
f8a0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
f8b0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f8c0: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
f8d0: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
f8e0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
f8f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f900: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f910: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
f920: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
f930: 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f  ags1&flags3&MEM_
f940: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
f950: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
f960: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
f970: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
f980: 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 0;  /* Operand
f990: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
f9a0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f9b0: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
f9c0: 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f   Operands are no
f9d0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f9e0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f9f0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
fa00: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
fa10: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
fa20: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
fa30: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
fa40: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
fa50: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
fa60: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
fa70: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
fa80: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
fa90: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
faa0: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
fab0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
fac0: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
fad0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
fae0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69  ->p2];.        i
faf0: 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20  Compare = 1;    
fb00: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fb10: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fb20: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
fb30: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fb40: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
fb50: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
fb60: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
fb70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
fb80: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
fb90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fba0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
fbb0: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
fbc0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
fbd0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fbe0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
fbf0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
fc00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fc10: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
fc20: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
fc30: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
fc40: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
fc50: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
fc60: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
fc70: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
fc80: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
fc90: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
fca0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
fcb0: 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
fcc0: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
fcd0: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
fce0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
fcf0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
fd00: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
fd10: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
fd20: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
fd30: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
fd40: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
fd50: 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49 6e 33  rt( flags3==pIn3
fd60: 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
fd70: 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61 73 65       /* testcase
fd80: 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e  ( flags3!=pIn3->
fd90: 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20  flags );.       
fda0: 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65 64 20     ** this used 
fdb0: 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65 20 77  to be possible w
fdc0: 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33 2c 20  ith pIn1==pIn3, 
fdd0: 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a 20 20  but not since.  
fde0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63          ** the c
fdf0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61 73 20  olumn cache was 
fe00: 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20 66 6f  removed.  The fo
fe10: 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e 6d 65  llowing assignme
fe20: 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  nt.          ** 
fe30: 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 61  is essentially a
fe40: 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20 69 74   no-op.  But, it
fe50: 20 70 72 6f 76 69 64 65 73 20 64 65 66 65 6e 73   provides defens
fe60: 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20 20 20  e-in-depth.     
fe70: 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20       ** in case 
fe80: 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69 73 20  our analysis is 
fe90: 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20 69 74  incorrect, so it
fea0: 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a   is left in. */.
feb0: 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 33            flags3
fec0: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
fed0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fee0: 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
fef0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
ff00: 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
ff10: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
ff20: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
ff30: 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
ff40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ff50: 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c  }.      /* Handl
ff60: 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
ff70: 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d  e of integer com
ff80: 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73  parison here, as
ff90: 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74   an.      ** opt
ffa0: 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76  imization, to av
ffb0: 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  oid a call to sq
ffc0: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
ffd0: 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  ) */.      if( (
ffe0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
fff0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10000 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  Int)!=0 ){.     
10010 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
10020 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   > pIn1->u.i ){ 
10030 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63  res = +1; goto c
10040 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
10050 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10060 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i < pIn1->u.i )
10070 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f  { res = -1; goto
10080 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10090 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
100a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d          goto com
100b0 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d  pare_op;.      }
100c0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
100d0 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
100e0 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
100f0 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
10100 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
10110 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10120 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
10130 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
10140 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10150 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10160 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10170 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10180 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
10190 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
101a0 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
101b0 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
101c0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
101d0 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
101e0 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
101f0 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10200 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
10210 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
10220 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10230 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
10240 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61  Mask);.        a
10250 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e  ssert( pIn1!=pIn
10260 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3 );.      }.   
10270 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
10280 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10290 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
102a0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
102b0 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
102c0 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
102d0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
102e0 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
102f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10300 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10310 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10320 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
10330 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
10340 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10350 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
10360 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
10370 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
10380 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
10390 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
103a0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
103b0 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
103c0 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
103d0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
103e0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
103f0 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
10400 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
10410 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
10420 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
10430 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
10440 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d  .pColl);.  }.com
10450 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74  pare_op:.  /* At
10460 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65 73   this point, res
10470 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a 65   is negative, ze
10480 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 20  ro, or positive 
10490 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20 20  if reg[P1] is.  
104a0 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71  ** less than, eq
104b0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
104c0 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c  er than reg[P3],
104d0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
104e0 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68 65  Compute.  ** the
104f0 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73 20   answer to this 
10500 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73 32  operator in res2
10510 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
10520 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69 73  hat the comparis
10530 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72  on.  ** operator
10540 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20 54   actually is.  T
10550 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
10560 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f 6e   code depends on
10570 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20 74   the fact.  ** t
10580 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61 72  hat the 6 compar
10590 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 61  ison operators a
105a0 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20 69  re consecutive i
105b0 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73 0a  ntegers in this.
105c0 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c    ** order:  NE,
105d0 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c   EQ, GT, LE, LT,
105e0 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   GE */.  assert(
105f0 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20   OP_Eq==OP_Ne+1 
10600 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 74  ); assert( OP_Gt
10610 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73  ==OP_Ne+2 ); ass
10620 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e  ert( OP_Le==OP_N
10630 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e+3 );.  assert(
10640 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20   OP_Lt==OP_Ne+4 
10650 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 65  ); assert( OP_Ge
10660 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69  ==OP_Ne+5 );.  i
10670 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20 20  f( res<0 ){     
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74     /* ne, eq, gt
106a0 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a  , le, lt, ge */.
106b0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
106c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
106d0 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c  LTb[] = { 1,  0,
106e0 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30 20    0,  1,  1,  0 
106f0 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 4c  };.    res2 = aL
10700 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Tb[pOp->opcode -
10710 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
10720 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
10730 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
10740 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 45  unsigned char aE
10750 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20  Qb[] = { 0,  1, 
10760 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20 7d   0,  1,  0,  1 }
10770 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45 51  ;.    res2 = aEQ
10780 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20  b[pOp->opcode - 
10790 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b  OP_Ne];.  }else{
107a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
107b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
107c0 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aGTb[] = { 1,  0
107d0 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31  ,  1,  0,  0,  1
107e0 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
107f0 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  GTb[pOp->opcode 
10800 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20  - OP_Ne];.  }.. 
10810 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
10820 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
10830 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
10840 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
10850 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ers. */.  assert
10860 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10870 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10880 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags1 & MEM_Dyn) 
10890 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
108a0 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73   = flags1;.  ass
108b0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
108c0 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
108d0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79  (flags3 & MEM_Dy
108e0 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  n) );.  pIn3->fl
108f0 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20  ags = flags3;.. 
10900 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10910 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10920 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
10930 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
10940 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a  iCompare = res;.
10950 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
10960 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
10970 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
10980 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
10990 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
109a0 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
109b0 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
109c0 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
109d0 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
109e0 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
109f0 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
10a00 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
10a10 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
10a20 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
10a30 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
10a40 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
10a50 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
10a60 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
10a70 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
10a80 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
10a90 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
10aa0 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
10ab0 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
10ac0 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
10ad0 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
10ae0 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
10af0 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
10b00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
10b10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10b20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
10b30 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
10b40 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
10b50 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
10b60 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
10b70 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
10b80 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
10b90 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10ba0 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
10bb0 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10bc0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10bd0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
10be0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
10bf0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10c00 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
10c10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
10c20 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
10c30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
10c40 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
10c50 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
10c60 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10c70 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
10c80 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10c90 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
10ca0 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
10cb0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10cc0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
10cd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
10ce0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
10cf0 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
10d00 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
10d10 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
10d20 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  2 ){.      goto 
10d30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
10d40 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
10d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73  ../* Opcode: Els
10d60 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20  eNotEq * P2 * * 
10d70 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
10d80 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61  ode must immedia
10d90 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f  tely follow an O
10da0 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f  P_Lt or OP_Gt co
10db0 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
10dc0 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20  r..** If result 
10dd0 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
10de0 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61  arison on the sa
10df0 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a  me two operands.
10e00 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
10e10 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28   NULL or false (
10e20 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75  0), then then ju
10e30 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
10e40 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
10e50 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10e60 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72  on on the two pr
10e70 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a  evious operands.
10e80 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
10e90 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65  en true (1), the
10ea0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  n fall through..
10eb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e  */.case OP_ElseN
10ec0 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a  otEq: {       /*
10ed0 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41   same as TK_ESCA
10ee0 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73  PE, jump */.  as
10ef0 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
10f00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
10f10 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74  1].opcode==OP_Lt
10f20 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f   || pOp[-1].opco
10f30 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61  de==OP_Gt );.  a
10f40 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
10f50 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
10f60 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  P2 );.  VdbeBran
10f70 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65  chTaken(iCompare
10f80 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69  !=0, 2);.  if( i
10f90 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74  Compare!=0 ) got
10fa0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
10fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
10fc0 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
10fd0 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
10fe0 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
10ff0 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
11000 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
11010 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e 65  erator in the ne
11020 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
11030 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11040 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
11050 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2e   the P4 operand.
11060 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
11070 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
11080 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
11090 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
110a0 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
110b0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
110c0 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
110d0 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
110e0 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
110f0 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
11100 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
11110 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
11120 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  **.** The first 
11130 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 50  integer in the P
11140 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79 20  4 integer array 
11150 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  is the length of
11160 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e   the array.** an
11170 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d  d does not becom
11180 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 65  e part of the pe
11190 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  rmutation..*/.ca
111a0 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
111b0 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
111c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
111d0 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
111e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
111f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11200 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  [1].opcode==OP_C
11210 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73 65  ompare );.  asse
11220 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20  rt( pOp[1].p5 & 
11230 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 29  OPFLAG_PERMUTE )
11240 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
11250 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
11260 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
11270 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11280 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
11290 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
112a0 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
112b0 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
112c0 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
112d0 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
112e0 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
112f0 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
11300 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
11310 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
11320 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
11330 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
11340 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
11350 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
11360 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
11370 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11380 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
11390 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
113a0 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
113b0 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
113c0 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
113d0 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
113e0 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
113f0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11400 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
11410 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
11420 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
11430 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
11440 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
11450 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
11460 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
11470 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
11480 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
11490 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
114a0 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
114b0 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
114c0 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
114d0 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
114e0 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
114f0 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
11500 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
11510 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
11520 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
11530 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
11540 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
11550 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
11560 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
11570 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
11580 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
11590 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
115a0 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
115b0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
115c0 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
115d0 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
115e0 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
115f0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
11600 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
11610 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
11620 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11630 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
11640 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
11650 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
11660 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
11670 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
11680 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  er */.  int *aPe
11690 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54 68  rmute;     /* Th
116a0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
116b0 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35  ..  if( (pOp->p5
116c0 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
116d0 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50 65  E)==0 ){.    aPe
116e0 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  rmute = 0;.  }el
116f0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
11700 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
11710 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
11720 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74  pcode==OP_Permut
11730 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73  ation );.    ass
11740 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
11750 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
11760 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74 65   );.    aPermute
11770 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69   = pOp[-1].p4.ai
11780 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   + 1;.    assert
11790 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29 3b  ( aPermute!=0 );
117a0 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  .  }.  n = pOp->
117b0 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
117c0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
117d0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
117e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
117f0 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
11800 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
11810 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
11820 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
11830 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
11840 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
11850 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
11860 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
11870 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
11880 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
11890 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
118a0 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
118b0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
118c0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
118d0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
118e0 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
118f0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11900 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
11910 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11920 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
11930 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11940 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
11950 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
11960 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11970 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11980 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
11990 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
119a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
119b0 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
119c0 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
119d0 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
119e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
119f0 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
11a00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
11a10 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
11a20 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
11a30 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
11a40 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
11a50 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
11a60 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
11a70 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
11a80 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
11a90 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65  KeyInfo->nKeyFie
11aa0 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
11ab0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
11ac0 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
11ad0 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
11ae0 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
11af0 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
11b00 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
11b10 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
11b20 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
11b30 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
11b40 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
11b50 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
11b60 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
11b70 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
11b80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11b90 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
11ba0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11bb0 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
11bc0 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
11bd0 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
11be0 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
11bf0 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
11c00 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
11c10 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
11c20 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
11c30 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
11c40 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
11c50 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
11c60 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
11c70 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
11c80 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
11c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11ca0 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
11cb0 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62  are<0 ){.    Vdb
11cc0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 34  eBranchTaken(0,4
11cd0 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11ce0 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p1 - 1];.  }e
11cf0 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
11d00 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  ==0 ){.    VdbeB
11d10 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34 29 3b  ranchTaken(1,4);
11d20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11d30 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73  >p2 - 1];.  }els
11d40 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
11d50 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70 4f 70  hTaken(2,4); pOp
11d60 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20   = &aOp[pOp->p3 
11d70 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1];.  }.  brea
11d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11d90 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
11da0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11db0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72  [P3]=(r[P1] && r
11dc0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
11dd0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
11de0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
11df0 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
11e00 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
11e10 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
11e20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
11e30 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
11e40 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
11e50 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
11e60 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
11e70 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
11e80 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
11e90 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
11ea0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
11eb0 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
11ec0 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
11ed0 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
11ee0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11ef0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72  [P3]=(r[P1] || r
11f00 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
11f10 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
11f20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
11f30 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
11f40 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
11f50 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
11f60 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11f70 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11f80 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
11f90 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
11fa0 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
11fb0 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
11fc0 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
11fd0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
11fe0 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
11ff0 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
12000 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
12010 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
12020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12030 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
12040 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
12050 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
12060 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12070 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
12080 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
12090 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
120a0 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
120b0 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
120c0 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
120d0 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
120e0 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
120f0 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
12100 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
12110 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
12120 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
12130 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
12140 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b  em[pOp->p1], 2);
12150 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56  .  v2 = sqlite3V
12160 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
12170 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20  &aMem[pOp->p2], 
12180 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  2);.  if( pOp->o
12190 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
121a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
121b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
121c0 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
121d0 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
121e0 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
121f0 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
12200 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
12210 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
12220 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12230 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
12240 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
12250 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
12260 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
12270 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
12280 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12290 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
122a0 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
122b0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
122c0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
122d0 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
122e0 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
122f0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
12300 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
12310 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12320 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31 20 50  ode: IsTrue P1 P
12330 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
12340 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d 20 63  opsis: r[P2] = c
12350 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d 3d 54  oalesce(r[P1]==T
12360 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a 2a 0a  RUE,P3) ^ P4.**.
12370 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
12380 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 49 53  mplements the IS
12390 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53 45 2c   TRUE, IS FALSE,
123a0 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20 61 6e   IS NOT TRUE, an
123b0 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41 4c 53  d.** IS NOT FALS
123c0 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a  E operators..**.
123d0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
123e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
123f0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
12400 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
12410 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e   that.** boolean
12420 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e 20 72   (a 0 or 1) in r
12430 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f 72 20  egister P2.  Or 
12440 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
12450 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
12460 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ** NULL, then th
12470 65 20 50 33 20 69 73 20 73 74 6f 72 65 64 20 69  e P3 is stored i
12480 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
12490 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73 77 65  Invert the answe
124a0 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20 31 2e  r if P4.** is 1.
124b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67 69 63  .**.** The logic
124c0 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64 20 6c   is summarized l
124d0 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
124e0 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66  <ul> .** <li> If
124f0 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 30   P3==0 and P4==0
12500 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
12510 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45 0a 2a   r[P1] IS TRUE.*
12520 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20  * <li> If P3==1 
12530 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
12540 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
12550 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e  IS FALSE.** <li>
12560 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34   If P3==0 and P4
12570 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==1  then  r[P2]
12580 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54   := r[P1] IS NOT
12590 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66   TRUE.** <li> If
125a0 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 30   P3==1 and P4==0
125b0 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
125c0 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 46 41   r[P1] IS NOT FA
125d0 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a  LSE.** </ul>.*/.
125e0 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65 3a 20  case OP_IsTrue: 
125f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
12600 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  /* in1, out2 */.
12610 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12620 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
12630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
12640 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.i==0 || pOp
12650 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20 20 61  ->p4.i==1 );.  a
12660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
12670 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20  0 || pOp->p3==1 
12680 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
12690 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
126a0 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20 20 20  m[pOp->p2],.    
126b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f    sqlite3VdbeBoo
126c0 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
126d0 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70  pOp->p1], pOp->p
126e0 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69 29 3b  3) ^ pOp->p4.i);
126f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12700 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
12710 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
12720 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
12730 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
12740 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
12750 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
12760 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
12770 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
12780 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
12790 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
127a0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
127b0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
127c0 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
127d0 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
127e0 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
127f0 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
12800 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12810 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
12820 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
12830 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12840 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
12850 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
12860 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12870 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
12880 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12890 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
128a0 20 21 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f   !sqlite3VdbeBoo
128b0 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31 2c 30  leanValue(pIn1,0
128c0 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ));.  }else{.   
128d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
128e0 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
128f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12900 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
12910 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12920 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20  ynopsis: r[P2]= 
12930 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
12940 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
12950 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
12960 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
12970 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
12980 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
12990 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
129a0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
129b0 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
129c0 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
129d0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
129e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
129f0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12a00 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
12a10 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
12a20 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12a30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12a40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12a50 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
12a60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
12a70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
12a80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12a90 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
12aa0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12ab0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
12ac0 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64  u.i = ~sqlite3Vd
12ad0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
12ae0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12af0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
12b00 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
12b10 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
12b20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
12b30 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66 69 72  truction the fir
12b40 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f 70 63  st time this opc
12b50 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e  ode is.** encoun
12b60 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20 69 6e  tered on each in
12b70 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  vocation of the 
12b80 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67 72 61  byte-code progra
12b90 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a  m.  Jump to P2.*
12ba0 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * on the second 
12bb0 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
12bc0 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 64 75  nt encounters du
12bd0 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e  ring the same in
12be0 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  vocation..**.** 
12bf0 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61  Top-level progra
12c00 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66 69 72  ms determine fir
12c10 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79  st invocation by
12c20 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65 20 50   comparing the P
12c30 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61 67 61  1.** operand aga
12c40 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70 65 72  inst the P1 oper
12c50 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e  and on the OP_In
12c60 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74 68 65  it opcode at the
12c70 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66   beginning.** of
12c80 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
12c90 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 73 20  f the P1 values 
12ca0 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66 61 6c  differ, then fal
12cb0 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6d 61  l through and ma
12cc0 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f 66 20  ke.** the P1 of 
12cd0 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71 75 61  this opcode equa
12ce0 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66 20 4f  l to the P1 of O
12cf0 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31 20 76  P_Init.  If P1 v
12d00 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74 68 65  alues are.** the
12d10 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b 65 20   same then take 
12d20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20  the jump..**.** 
12d30 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d 73 2c  For subprograms,
12d40 20 74 68 65 72 65 20 69 73 20 61 20 62 69 74 6d   there is a bitm
12d50 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62 65 46  ask in the VdbeF
12d60 72 61 6d 65 20 74 68 61 74 20 64 65 74 65 72 6d  rame that determ
12d70 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65 72 20  ines.** whether 
12d80 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
12d90 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e  should be taken.
12da0 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20 69 73    The bitmask is
12db0 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 62 65   necessary.** be
12dc0 63 61 75 73 65 20 74 68 65 20 73 65 6c 66 2d 61  cause the self-a
12dd0 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74 72 69  ltering code tri
12de0 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  ck does not work
12df0 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 0a 2a   for recursive.*
12e00 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63  * triggers..*/.c
12e10 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
12e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12e30 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41 64 64  mp */.  u32 iAdd
12e40 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
12e50 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
12e60 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
12e70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
12e80 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d  >aOp[0].opcode==
12e90 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69 66 28  OP_Init );.  if(
12ea0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
12eb0 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74 29 28    iAddr = (int)(
12ec0 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20  pOp - p->aOp);. 
12ed0 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72 61 6d     if( (p->pFram
12ee0 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38  e->aOnce[iAddr/8
12ef0 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72 20 26  ] & (1<<(iAddr &
12f00 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20   7)))!=0 ){.    
12f10 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12f20 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
12f30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12f40 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72      }.    p->pFr
12f50 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
12f60 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72  /8] |= 1<<(iAddr
12f70 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a   & 7);.  }else{.
12f80 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30      if( p->aOp[0
12f90 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b  ].p1==pOp->p1 ){
12fa0 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
12fb0 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
12fc0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12fd0 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
12fe0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12ff0 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70  (0, 2);.  pOp->p
13000 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  1 = p->aOp[0].p1
13010 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13020 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
13030 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
13040 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
13050 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13060 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
13070 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
13080 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
13090 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
130a0 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
130b0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
130c0 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
130d0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
130e0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
130f0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
13100 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
13110 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
13120 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13130 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73    int c;.  c = s
13140 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
13150 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
13160 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b  ->p1], pOp->p3);
13170 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13180 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
13190 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
131a0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
131b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
131c0 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
131d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
131e0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
131f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
13200 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
13210 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
13220 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
13230 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
13240 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
13250 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
13260 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
13270 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
13280 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
13290 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
132a0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
132b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
132c0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
132d0 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21 73 71  int c;.  c = !sq
132e0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
132f0 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
13300 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b  >p1], !pOp->p3);
13310 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13320 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
13330 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
13340 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
13350 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13360 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
13370 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
13380 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
13390 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
133a0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
133b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
133c0 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
133d0 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
133e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
133f0 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
13400 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
13410 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13420 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
13430 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
13440 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
13450 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
13460 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13470 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
13480 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
13490 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
134a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
134b0 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
134c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
134d0 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
134e0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
134f0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
13500 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13510 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
13520 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
13530 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
13540 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
13550 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
13560 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
13570 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13580 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
13590 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
135a0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
135b0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
135c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
135d0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
135e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
135f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75  ./* Opcode: IfNu
13610 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a  llRow P1 P2 P3 *
13620 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
13630 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68  if P1.nullRow th
13640 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67  en r[P3]=NULL, g
13650 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65  oto P2.**.** Che
13660 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ck the cursor P1
13670 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73   to see if it is
13680 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
13690 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f  ing at a NULL ro
136a0 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20  w..** If it is, 
136b0 74 68 65 6e 20 73 65 74 20 72 65 67 69 73 74 65  then set registe
136c0 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64  r P3 to NULL and
136d0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
136e0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
136f0 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55  1 is not on a NU
13700 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c  LL row, then fal
13710 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75  l through withou
13720 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20  t making any.** 
13730 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65  changes..*/.case
13740 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b   OP_IfNullRow: {
13750 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
13760 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
13770 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
13780 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
13790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
137a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
137b0 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
137c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
137d0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
137e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
137f0 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
13800 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
13810 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13820 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
13830 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
13840 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20  SET_SQL_FUNC./* 
13850 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 20 50  Opcode: Offset P
13860 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
13870 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d  ynopsis: r[P3] =
13880 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 50   sqlite_offset(P
13890 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  1).**.** Store i
138a0 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50 33 5d  n register r[P3]
138b0 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74   the byte offset
138c0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
138d0 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73 20  se file that is 
138e0 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20  the.** start of 
138f0 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f 72 20  the payload for 
13900 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
13910 69 63 68 20 74 68 61 74 20 63 75 72 73 6f 72 20  ich that cursor 
13920 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a  P1 is currently.
13930 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ** pointing..**.
13940 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63 6f 6c  ** P2 is the col
13950 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
13960 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
13970 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  he sqlite_offset
13980 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
13990 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
139a0 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74 73 65   not use P2 itse
139b0 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32 20 76  lf, but the P2 v
139c0 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
139d0 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65  the.** code gene
139e0 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31 2c 20  rator.  The P1, 
139f0 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65 72 61  P2, and P3 opera
13a00 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  nds to this opco
13a10 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20 73 61  de are the.** sa
13a20 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c  me as for OP_Col
13a30 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  umn..**.** This 
13a40 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 61  opcode is only a
13a50 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69  vailable if SQLi
13a60 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
13a70 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53 51 4c  ith the.** -DSQL
13a80 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45  ITE_ENABLE_OFFSE
13a90 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74 69 6f  T_SQL_FUNC optio
13aa0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  n..*/.case OP_Of
13ab0 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fset: {         
13ac0 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20 56 64   /* out3 */.  Vd
13ad0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
13ae0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13af0 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  sor */.  assert(
13b00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13b10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13b20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
13b30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
13b40 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
13b50 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
13b60 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20 7c 7c   NEVER(pC==0) ||
13b70 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13b80 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
13b90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13ba0 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
13bb0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
13bc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
13bd0 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c 69 74  nt64(pOut, sqlit
13be0 65 33 42 74 72 65 65 4f 66 66 73 65 74 28 70 43  e3BtreeOffset(pC
13bf0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a  ->uc.pCursor));.
13c00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
13c10 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
13c20 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13c30 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70  L_FUNC */../* Op
13c40 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
13c50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
13c60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50  ynopsis: r[P3]=P
13c70 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
13c80 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
13c90 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
13ca0 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
13cb0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
13cc0 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
13cd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
13ce0 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
13cf0 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
13d00 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
13d10 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
13d20 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
13d30 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
13d40 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
13d50 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
13d60 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
13d70 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
13d80 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
13d90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
13da0 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
13db0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
13dc0 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
13dd0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
13de0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
13df0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13e00 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
13e10 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
13e20 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
13e30 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
13e40 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
13e50 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
13e60 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
13e70 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
13e80 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
13e90 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
13ea0 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
13eb0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
13ec0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
13ed0 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
13ee0 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
13ef0 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
13f00 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
13f10 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
13f20 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
13f30 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
13f40 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
13f50 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
13f60 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
13f70 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
13f80 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
13f90 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
13fa0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
13fb0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
13fc0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13fd0 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
13fe0 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 then.** the 
13ff0 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
14000 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
14010 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
14020 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
14030 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
14040 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
14050 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
14060 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
14070 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
14080 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
14090 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
140a0 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
140b0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
140c0 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
140d0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
140e0 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
140f0 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
14100 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
14110 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
14120 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
14130 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
14140 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
14150 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
14160 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
14170 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
14180 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
14190 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
141a0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
141b0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
141c0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
141d0 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
141e0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
141f0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
14200 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14220 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
14230 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
14240 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
14250 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
14260 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
14270 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
14280 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
14290 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
142a0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
142b0 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
142c0 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
142d0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
142e0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
142f0 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
14300 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
14310 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
14320 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
14330 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
14340 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
14350 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
14360 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66  ader */.  u64 of
14370 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20  fset64;      /* 
14380 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f  64-bit offset */
14390 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
143a0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
143b0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
143c0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
143d0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
143e0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
143f0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
14400 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
14410 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
14420 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
14430 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
14440 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
14450 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74 20 69  le (meaning it i
14460 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
14470 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68  point at.  ** th
14480 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29 20 74  e correct row) t
14490 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75 70 2d  hen bring it up-
144a0 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69 6e 67  to-date by doing
144b0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a   the necessary .
144c0 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65 65 6b    ** B-Tree seek
144d0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
144e0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
144f0 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
14500 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
14510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14520 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
14530 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14540 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
14550 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
14560 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
14570 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
14580 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
14590 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
145a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
145b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
145c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
145d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
145e0 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
145f0 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
14600 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
14610 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14620 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
14630 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
14640 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
14650 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
14660 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
14670 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
14680 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
14690 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
146a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
146b0 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146d0 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
146e0 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
146f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
14700 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
14710 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
14720 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
14730 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70 65 63   /* For the spec
14740 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73 20 70  ial case of as p
14750 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68  seudo-cursor, th
14760 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66 69 65  e seekResult fie
14770 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 64  ld.        ** id
14780 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 65 67  entifies the reg
14790 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
147a0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
147b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
147c0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e 30 20  C->seekResult>0 
147d0 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
147e0 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b  = &aMem[pC->seek
147f0 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20  Result];.       
14800 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
14810 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
14820 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
14830 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
14840 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
14850 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
14860 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65   pC->szRow = pRe
14870 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
14880 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
14890 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
148a0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
148b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
148c0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
148d0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
148e0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
148f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
14900 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
14910 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
14920 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14930 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14940 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14950 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
14960 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14970 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
14980 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
14990 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
149a0 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
149b0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
149c0 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
149d0 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
149e0 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
149f0 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77  Crsr, &pC->szRow
14a00 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14a10 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e   pC->szRow<=pC->
14a20 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20  payloadSize );. 
14a30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14a40 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b  >szRow<=65536 );
14a50 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
14a60 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
14a70 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
14a80 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
14a90 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
14aa0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
14ab0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
14ac0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
14ad0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
14ae0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
14af0 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
14b00 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
14b10 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
14b20 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65 74  C->aRow, aOffset
14b30 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  [0]);.    pC->nH
14b40 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a  drParsed = 0;...
14b50 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f      if( pC->szRo
14b60 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20  w<aOffset[0] ){ 
14b70 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54       /*OPTIMIZAT
14b80 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
14b90 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
14ba0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
14bb0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
14bc0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
14bd0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
14be0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
14bf0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
14c00 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
14c10 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
14c20 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
14c30 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
14c40 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
14c50 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
14c60 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
14c70 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
14c80 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
14c90 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
14ca0 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
14cb0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
14cc0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
14cd0 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
14ce0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
14cf0 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
14d00 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
14d10 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
14d20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
14d30 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
14d40 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
14d50 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
14d60 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
14d70 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
14d80 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
14d90 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
14da0 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
14db0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
14dc0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
14dd0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
14de0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
14df0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
14e00 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
14e10 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
14e20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
14e30 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
14e40 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
14e50 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
14e60 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
14e70 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
14e80 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
14e90 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
14ea0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
14eb0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
14ec0 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
14ed0 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73  .      if( aOffs
14ee0 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c  et[0] > 98307 ||
14ef0 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70 43   aOffset[0] > pC
14f00 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
14f10 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
14f20 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
14f30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
14f40 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  se{.      /* Thi
14f50 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
14f60 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70 70 69  tion.  By skippi
14f70 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69 72 73  ng over the firs
14f80 74 20 66 65 77 20 74 65 73 74 73 0a 20 20 20 20  t few tests.    
14f90 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48    ** (ex: pC->nH
14fa0 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20 69 6e  drParsed<=p2) in
14fb0 20 74 68 65 20 6e 65 78 74 20 73 65 63 74 69 6f   the next sectio
14fc0 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20 61 0a  n, we achieve a.
14fd0 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75 72 61        ** measura
14fe0 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ble performance 
14ff0 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  gain..      **. 
15000 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62 72 61       ** This bra
15010 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65 76 65  nch is taken eve
15020 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d  n if aOffset[0]=
15030 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65 63 6f  =0.  Such a reco
15040 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20 20 20  rd is never.    
15050 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 62    ** generated b
15060 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f  y SQLite, and co
15070 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65  uld be considere
15080 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75  d corruption, bu
15090 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20 61 63  t we.      ** ac
150a0 63 65 70 74 20 69 74 20 66 6f 72 20 68 69 73 74  cept it for hist
150b0 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20  orical reasons. 
150c0 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d   When aOffset[0]
150d0 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20 74 68  ==0, the code th
150e0 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72 61 6e  is.      ** bran
150f0 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65 61 64  ch jumps to read
15100 73 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  s past the end o
15110 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 62 75  f the record, bu
15120 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20 20 20  t never more.   
15130 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66 65 77     ** than a few
15140 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20 69 66   bytes.  Even if
15150 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63 63 75   the record occu
15160 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
15170 20 74 68 65 20 70 61 67 65 0a 20 20 20 20 20 20   the page.      
15180 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c  ** content area,
15190 20 74 68 65 20 22 70 61 67 65 20 68 65 61 64 65   the "page heade
151a0 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72 20 74  r" comes after t
151b0 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20  he page content 
151c0 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20  and so.      ** 
151d0 74 68 69 73 20 6f 76 65 72 72 65 61 64 20 69 73  this overread is
151e0 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69   harmless.  Simi
151f0 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20 63 61  lar overreads ca
15200 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20 63 6f  n occur for a co
15210 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a 20 64  rrupt.      ** d
15220 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
15230 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61      */.      zDa
15240 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20  ta = pC->aRow;. 
15250 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
15260 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
15270 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  );         /* Co
15280 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65  nditional skippe
15290 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  d */.      testc
152a0 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d  ase( aOffset[0]=
152b0 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
152c0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
152d0 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20  header;.    }.  
152e0 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
152f0 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
15300 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
15310 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
15320 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
15330 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
15340 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
15350 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
15360 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
15370 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
15380 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
15390 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
153a0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
153b0 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
153c0 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
153d0 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
153e0 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
153f0 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
15400 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
15410 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
15420 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
15430 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
15440 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
15450 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
15460 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
15470 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
15480 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
15490 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
154a0 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
154b0 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
154c0 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
154d0 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
154e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
154f0 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63  FromBtree(pC->uc
15500 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66  .pCursor, 0, aOf
15510 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b  fset[0], &sMem);
15520 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
15530 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15540 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15550 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
15560 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
15570 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
15580 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
15590 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
155a0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
155b0 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
155c0 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
155d0 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
155e0 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
155f0 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75  . */.    op_colu
15600 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
15610 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
15620 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
15630 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
15640 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
15650 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
15660 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
15670 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
15680 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
15690 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
156a0 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b  zHdr>=zEndHdr );
156b0 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
156c0 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
156d0 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
156e0 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
156f0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
15700 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
15710 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
15720 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
15730 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
15740 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
15750 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
15760 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
15770 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
15780 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15790 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
157a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
157b0 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
157c0 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
157d0 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
157e0 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
157f0 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
15800 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
15810 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20  zEndHdr );..    
15820 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
15830 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  is corrupt if an
15840 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
15850 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20  ng are true:.   
15860 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79     ** (1) the by
15870 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  tes of the heade
15880 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68  r extend past th
15890 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65  e declared heade
158a0 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20  r size.      ** 
158b0 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68  (2) the entire h
158c0 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62  eader was used b
158d0 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20  ut not all data 
158e0 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a  was used.      *
158f0 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
15900 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
15910 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
15920 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
15930 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15940 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
15950 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
15960 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d  dr || offset64!=
15970 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
15980 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
15990 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c  set64 > pC->payl
159a0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
159b0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
159c0 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20  ffset[0]==0 ){. 
159d0 20 20 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a           i = 0;.
159e0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
159f0 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20   zEndHdr;.      
15a00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15a10 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
15a20 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
15a30 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
15a40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
15a50 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  o op_column_corr
15a60 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  upt;.        }. 
15a70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
15a80 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
15a90 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
15aa0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
15ab0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
15ac0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15ad0 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
15ae0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
15af0 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
15b00 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
15b10 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
15b20 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
15b30 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
15b40 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
15b50 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
15b60 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
15b70 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
15b80 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
15b90 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
15ba0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
15bb0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
15bc0 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
15bd0 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
15be0 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
15bf0 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
15c00 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15c10 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
15c20 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
15c30 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
15c40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15c50 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
15c60 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
15c70 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
15c80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15ca0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15cb0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
15cc0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
15cd0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15ce0 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
15cf0 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
15d00 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
15d10 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
15d20 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
15d30 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
15d40 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
15d50 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
15d60 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
15d70 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
15d80 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
15d90 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
15da0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
15db0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
15dc0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15dd0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15de0 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15df0 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15e00 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15e10 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15e20 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15e30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15e40 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15e50 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
15e60 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
15e70 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
15e80 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
15e90 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
15ea0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
15eb0 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
15ec0 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
15ed0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
15ee0 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
15ef0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
15f00 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
15f10 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
15f20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
15f30 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
15f40 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
15f50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15f60 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
15f70 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
15f80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
15f90 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
15fa0 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
15fb0 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
15fc0 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
15fd0 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
15fe0 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
15ff0 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
16000 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
16010 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
16020 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
16030 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
16040 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
16050 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
16060 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
16070 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
16080 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
16090 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
160a0 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
160b0 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
160c0 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
160d0 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
160e0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
160f0 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
16100 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
16110 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
16120 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16130 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
16140 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16150 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
16160 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
16170 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
16180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16190 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
161a0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
161b0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
161c0 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
161d0 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
161e0 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
161f0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
16200 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
16210 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
16220 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
16230 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
16240 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
16250 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
16260 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
16270 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
16280 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
16290 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
162a0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
162b0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
162c0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
162d0 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
162e0 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
162f0 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
16300 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
16310 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
16320 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
16330 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
16340 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
16350 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
16360 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
16370 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
16380 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
16390 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
163a0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
163b0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
163c0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
163d0 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
163e0 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
163f0 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
16400 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
16410 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
16420 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
16430 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
16440 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
16450 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
16460 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20  isk. .      **. 
16470 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68       ** Although
16480 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16490 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65 61 64  alGet() may read
164a0 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73   at most 8 bytes
164b0 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20   from the.      
164c0 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73 65 64  ** buffer passed
164d0 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e   to it, debuggin
164e0 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d  g function VdbeM
164f0 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 29 20  emPrettyPrint() 
16500 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61  may.      ** rea
16510 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31  d up to 16. So 1
16520 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73  6 bytes of bogus
16530 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70   content is supp
16540 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  lied..      */. 
16550 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
16560 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68  Zero[16];  /* Th
16570 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20  is is the bogus 
16580 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20  content */.     
16590 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
165a0 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20  alGet(aZero, t, 
165b0 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
165c0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
165d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
165e0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
165f0 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  rsor, aOffset[p2
16600 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a  ], len, pDest);.
16610 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16620 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16630 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16640 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  r;.      sqlite3
16650 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63  VdbeSerialGet((c
16660 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
16670 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  z, t, pDest);.  
16680 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16690 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a   &= ~MEM_Ephem;.
166a0 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f      }.  }..op_co
166b0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
166c0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
166d0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
166e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
166f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
16700 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  k;..op_column_co
16710 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70  rrupt:.  if( aOp
16720 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20  [0].p3>0 ){.    
16730 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30  pOp = &aOp[aOp[0
16740 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65  ].p3-1];.    bre
16750 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ak;.  }else{.   
16760 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
16770 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67  RUPT_BKPT;.    g
16780 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16790 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _error;.  }.}../
167a0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
167b0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
167c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
167d0 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
167e0 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
167f0 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
16800 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
16810 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
16820 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
16830 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
16840 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
16850 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
16860 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
16870 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
16880 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
16890 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
168a0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
168b0 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
168c0 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
168d0 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
168e0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
168f0 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
16900 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
16910 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
16920 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
16930 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
16940 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
16950 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
16960 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
16970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
16980 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
16990 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
169a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
169b0 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
169c0 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
169d0 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
169e0 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
169f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
16a00 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
16a10 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
16a20 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
16a30 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
16a40 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
16a50 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
16a60 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
16a70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
16a80 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
16a90 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
16aa0 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
16ab0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
16ac0 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
16ad0 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
16ae0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
16af0 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
16b00 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
16b10 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
16b20 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
16b30 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
16b40 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
16b50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
16b60 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
16b70 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
16b80 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
16b90 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16ba0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16bb0 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
16bc0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
16bd0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
16be0 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
16bf0 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
16c00 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
16c10 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
16c20 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16c30 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16c40 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16c50 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16c60 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16c70 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16c80 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
16c90 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
16ca0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
16cb0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
16cc0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
16cd0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
16ce0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
16cf0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
16d00 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16d10 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16d20 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16d30 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16d40 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16d60 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16d70 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16d90 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16da0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
16db0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
16dc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16dd0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
16de0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
16df0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16e00 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16e10 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16e20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16e30 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16e40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e50 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16e60 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16e70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16e80 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
16e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16ea0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
16eb0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
16ec0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
16ed0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
16ee0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
16ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
16f00 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16f10 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16f20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16f30 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16f40 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16f50 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16f60 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16f80 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16f90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
16fa0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
16fb0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
16fc0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
16fd0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
16fe0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
16ff0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
17000 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
17010 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
17020 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
17030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
17040 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
17050 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
17060 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
17070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17080 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
17090 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
170a0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
170c0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
170d0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
170e0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
170f0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
17100 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
17110 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
17120 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
17130 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
17140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
17180 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
17190 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
171a0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
171b0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
171c0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
171d0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
171e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
17220 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
17230 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
17240 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
17250 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
17260 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
17270 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
17280 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
17290 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
172a0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
172b0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
172c0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
172d0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
172e0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
172f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
17300 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
17310 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
17320 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
17330 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
17340 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
17350 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
17360 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
17370 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
17380 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17390 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
173a0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
173b0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
173c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
173d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
173e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
173f0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
17400 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
17410 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
17420 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
17430 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
17440 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
17450 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
17460 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
17470 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
17480 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
17490 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
174a0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
174b0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
174c0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
174d0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
174e0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
174f0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
17500 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
17510 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
17520 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
17530 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
17540 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
17550 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
17560 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
17570 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
17580 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
17590 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
175a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
175b0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
175c0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
175d0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
175e0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
175f0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
17600 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
17610 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
17620 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
17630 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
17640 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
17650 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
17660 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
17670 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
17680 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
17690 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
176a0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
176b0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
176c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
176d0 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
176e0 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
176f0 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
17700 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
17710 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
17720 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
17730 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
17740 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
17750 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
17760 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
17770 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
17780 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
17790 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
177a0 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
177b0 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
177c0 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
177d0 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
177e0 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
177f0 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
17800 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
17810 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
17820 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
17830 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
17840 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
17850 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
17860 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
17870 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
17880 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
17890 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
178a0 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
178b0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
178c0 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
178d0 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
178e0 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
178f0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
17900 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
17910 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
17920 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
17930 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
17940 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
17950 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
17960 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
17970 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72  pRec) );.    ser
17980 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
17990 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
179a0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
179b0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
179c0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
179d0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
179e0 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f 74 79     if( serial_ty
179f0 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pe==0 ){.       
17a00 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20   /* Values with 
17a10 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d  MEM_Null and MEM
17a20 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61 74 65  _Zero are create
17a30 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72  d by xColumn vir
17a40 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  tual.        ** 
17a50 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68  table methods th
17a60 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20  at never invoke 
17a70 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78  sqlite3_result_x
17a80 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20  xxxx() while.   
17a90 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e       ** computin
17aa0 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20  g an unchanging 
17ab0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20  column value in 
17ac0 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
17ad0 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20  ent..        ** 
17ae0 47 69 76 65 20 73 75 63 68 20 76 61 6c 75 65 73  Give such values
17af0 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72   a special inter
17b00 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72  nal-use-only ser
17b10 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20  ial-type of 10. 
17b20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61         ** so tha
17b30 74 20 74 68 65 79 20 63 61 6e 20 62 65 20 70 61  t they can be pa
17b40 73 73 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20  ssed through to 
17b50 78 55 70 64 61 74 65 20 61 6e 64 20 68 61 76 65  xUpdate and have
17b60 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72  .        ** a tr
17b70 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ue sqlite3_value
17b80 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a  _nochange(). */.
17b90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
17ba0 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
17bb0 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20  NOCHNG_MAGIC || 
17bc0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20  CORRUPT_DB );.  
17bd0 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70        serial_typ
17be0 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65  e = 10;.      }e
17bf0 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20 29 7b  lse if( nData ){
17c00 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
17c10 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
17c20 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f  dBlob(pRec) ) go
17c30 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
17c40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17c50 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
17c60 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
17c70 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e  len -= pRec->u.n
17c80 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Zero;.      }.  
17c90 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d    }.    nData +=
17ca0 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61   len;.    testca
17cb0 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
17cc0 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74  =127 );.    test
17cd0 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
17ce0 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48  e==128 );.    nH
17cf0 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70  dr += serial_typ
17d00 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c  e<=127 ? 1 : sql
17d10 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
17d20 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
17d30 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65  pRec->uTemp = se
17d40 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20 69  rial_type;.    i
17d50 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
17d60 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
17d70 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
17d80 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
17d90 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
17da0 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
17db0 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
17dc0 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
17dd0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
17de0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
17df0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
17e00 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
17e10 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
17e20 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
17e30 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
17e40 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
17e50 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
17e60 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
17e70 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
17e80 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
17e90 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
17ea0 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
17eb0 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
17ec0 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
17ed0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
17ee0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
17ef0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
17f00 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
17f10 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
17f20 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17f30 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17f40 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17f50 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17f60 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17f70 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17f80 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17f90 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  Data;..  /* Make
17fa0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
17fb0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
17fc0 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
17fd0 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
17fe0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
17ff0 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
18000 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
18010 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
18020 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
18030 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
18040 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
18050 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
18060 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
18070 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
18080 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
18090 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
180a0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
180b0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
180c0 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f 75  nByte+nZero<=pOu
180d0 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  t->szMalloc ){. 
180e0 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74     /* The output
180f0 20 72 65 67 69 73 74 65 72 20 69 73 20 61 6c 72   register is alr
18100 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75 67  eady large enoug
18110 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  h to hold the re
18120 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f 20  cord..    ** No 
18130 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72 20  error checks or 
18140 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d 65  buffer enlargeme
18150 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 20 2a  nt is required *
18160 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  /.    pOut->z = 
18170 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  pOut->zMalloc;. 
18180 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
18190 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  eed to make sure
181a0 20 74 68 61 74 20 74 68 65 20 6f 75 74 70 75 74   that the output
181b0 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67 20   is not too big 
181c0 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67 65  and then enlarge
181d0 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70  .    ** the outp
181e0 75 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 68  ut register to h
181f0 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65 73  old the full res
18200 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ult */.    if( n
18210 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61  Byte+nZero>db->a
18220 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
18230 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
18240 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
18250 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
18260 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
18270 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
18280 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
18290 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
182a0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mem;.    }.  }. 
182b0 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
182c0 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
182d0 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
182e0 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
182f0 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
18300 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
18310 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
18320 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
18330 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
18340 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
18350 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63  rial_type = pRec
18360 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20  ->uTemp;.    /* 
18370 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
18380 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f  6529-47362 Follo
18390 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  wing the size va
183a0 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20  rint are one or 
183b0 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69  more.    ** addi
183c0 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
183d0 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
183e0 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  */.    i += putV
183f0 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
18400 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
18410 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20  ype);           
18420 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
18430 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  */.    /* EVIDEN
18440 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35  CE-OF: R-64536-5
18450 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20  1728 The values 
18460 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
18470 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20  in the record.  
18480 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
18490 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64   follow the head
184a0 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20  er. */.    j += 
184b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
184c0 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
184d0 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61  [j], pRec, seria
184e0 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74  l_type); /* cont
184f0 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28  ent */.  }while(
18500 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
18510 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
18520 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72  =nHdr );.  asser
18530 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( j==nByte );..
18540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18550 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
18560 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
18570 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
18580 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
18590 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
185a0 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
185b0 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
185c0 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
185d0 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
185e0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
185f0 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  ero;.  }.  REGIS
18600 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
18610 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
18620 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
18630 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
18640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
18650 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
18660 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
18670 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
18680 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
18690 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
186a0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
186b0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
186c0 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
186d0 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
186e0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
186f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18700 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
18710 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
18720 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
18730 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
18740 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
18750 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
18760 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
18770 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
18780 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
18790 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
187a0 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
187b0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
187c0 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
187d0 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
187e0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
187f0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
18800 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
18810 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
18820 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
18830 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
18840 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18850 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
18860 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
18870 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
18880 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
18890 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
188a0 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
188b0 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
188c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
188d0 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
188e0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
188f0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
18900 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
18910 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
18920 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
18930 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
18940 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
18950 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
18960 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
18970 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
18980 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
18990 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
189a0 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
189b0 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
189c0 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
189f0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
18a00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
18a30 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
18a40 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
18a50 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
18a60 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
18a70 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
18a80 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
18a90 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
18aa0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
18ab0 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
18ac0 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
18ad0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
18ae0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
18af0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
18b00 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
18b10 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
18b20 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
18b30 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
18b40 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
18b50 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
18b60 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
18b70 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18b80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
18b90 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
18ba0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
18bb0 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
18bc0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
18bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18be0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
18bf0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18c00 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
18c10 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
18c20 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
18c30 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
18c40 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
18c50 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18c60 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
18c70 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
18c80 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
18c90 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
18ca0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
18cb0 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
18cc0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
18cd0 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
18ce0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
18cf0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
18d00 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
18d10 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
18d20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18d30 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
18d40 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
18d50 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
18d60 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
18d70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18d80 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
18d90 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
18da0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
18db0 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
18dc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18dd0 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
18de0 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
18df0 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
18e00 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
18e10 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
18e20 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
18e30 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
18e40 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
18e50 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
18e60 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
18e70 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
18e80 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
18e90 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
18ea0 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
18eb0 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
18ec0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
18ed0 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
18ee0 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
18ef0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
18f00 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18f10 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
18f20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
18f30 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
18f40 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
18f50 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
18f80 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
18f90 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
18fa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18fb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
18fc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
18fd0 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
18fe0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
18ff0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
19000 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
19010 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
19020 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
19030 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
19040 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
19050 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
19060 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
19070 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
19080 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
19090 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
190a0 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
190b0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
190c0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
190d0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
190e0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
190f0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
19100 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
19110 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
19120 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
19130 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
19140 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
19150 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
19160 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
19170 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
19180 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
19190 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
191a0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
191b0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
191c0 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
191d0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
191e0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
191f0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
19200 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
19210 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
19220 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
19230 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
19240 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
19250 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
19260 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
19270 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
19280 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
19290 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
192a0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
192b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
192c0 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
192d0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
192e0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
192f0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
19300 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
19310 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
19320 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
19330 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
19340 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
19350 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
19360 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
19370 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
19380 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
19390 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
193a0 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
193b0 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
193c0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
193d0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
193e0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
193f0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
19400 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
19410 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
19420 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
19430 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
19440 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
19450 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
19460 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
19470 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
19480 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
19490 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
194a0 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
194b0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
194c0 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
194d0 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
194e0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
194f0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
19500 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
19510 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
19520 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
19530 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
19540 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
19550 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
19570 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
19580 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
19590 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
195a0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
195b0 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
195c0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
195d0 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
195e0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
195f0 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
19600 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
19610 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
19620 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
19630 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
19640 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
19650 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
19660 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
19670 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
19680 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
19690 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
196a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
196b0 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
196c0 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
196d0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
196e0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
196f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19700 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
19710 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19720 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
19730 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
19740 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
19750 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
19760 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
19770 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
19780 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
19790 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
197a0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
197b0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
197c0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
197d0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
197e0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
197f0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
19800 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
19810 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19820 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
19830 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
19840 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
19850 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
19860 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
19870 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
19880 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
19890 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
198a0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
198b0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
198c0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
198d0 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
198e0 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
198f0 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c  nge = (db->mDbFl
19900 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68  ags & DBFLAG_Sch
19910 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20  emaChange)!=0;. 
19920 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
19930 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
19940 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
19950 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19960 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
19970 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
19980 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
199b0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c  _ABORT_ROLLBACK,
199c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
199f0 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20  Change==0);.    
19a00 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
19a10 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19a20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19a30 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
19a40 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
19a50 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
19a60 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  maChange = 0;.  
19a70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19a80 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
19a90 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
19aa0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19ab0 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
19ac0 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
19ad0 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
19ae0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
19af0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19b00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
19b10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19b20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
19b30 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
19b40 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65        if( isSche
19b50 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20  maChange ){.    
19b60 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
19b70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
19b80 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20  ments(db, 0);.  
19b90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
19ba0 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
19bb0 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
19bc0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44            db->mD
19bd0 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47  bFlags |= DBFLAG
19be0 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  _SchemaChange;. 
19bf0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
19c00 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
19c10 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
19c20 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
19c30 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
19c40 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
19c50 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
19c60 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
19c70 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
19c80 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
19c90 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
19ca0 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
19cb0 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
19cc0 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
19cd0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
19ce0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
19cf0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
19d00 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
19d10 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19d20 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
19d30 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
19d40 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
19d50 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
19d60 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
19d70 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
19d80 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
19d90 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
19da0 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
19db0 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
19dc0 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
19dd0 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
19de0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
19df0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
19e00 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
19e10 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
19e20 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
19e30 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
19e40 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
19e50 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
19e60 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
19e70 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
19e80 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
19e90 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
19ea0 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
19eb0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
19ec0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
19ed0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
19ee0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
19ef0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
19f00 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
19f10 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
19f20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
19f30 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
19f40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19f50 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
19f60 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
19f70 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
19f80 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
19f90 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
19fa0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
19fb0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
19fc0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
19fd0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
19fe0 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
19ff0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
1a000 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a010 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1a020 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
1a030 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
1a040 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1a050 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a060 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1a070 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
1a080 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1a090 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a0a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a0b0 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
1a0c0 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
1a0d0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
1a0e0 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
1a0f0 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
1a100 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
1a110 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
1a120 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
1a130 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
1a140 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
1a150 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
1a160 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
1a170 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
1a180 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
1a190 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
1a1a0 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
1a1b0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
1a1c0 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
1a1d0 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
1a1e0 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
1a1f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1a200 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
1a210 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
1a220 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
1a230 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
1a240 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
1a250 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
1a260 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
1a270 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
1a280 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
1a290 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
1a2a0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1a2b0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
1a2c0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
1a2d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
1a2e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1a2f0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
1a300 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1a310 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
1a320 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
1a330 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
1a340 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
1a350 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a360 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
1a370 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
1a380 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1a390 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
1a3a0 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
1a3b0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1a3c0 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
1a3d0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1a3e0 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
1a3f0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
1a400 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1a410 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
1a420 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
1a430 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
1a440 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
1a450 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
1a460 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
1a470 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
1a480 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
1a490 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
1a4a0 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
1a4b0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
1a4c0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
1a4d0 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
1a4e0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
1a4f0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1a500 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1a510 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
1a520 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
1a550 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
1a560 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
1a570 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
1a580 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a590 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1a5a0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
1a5b0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
1a5c0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
1a5d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1a5e0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1a5f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a600 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1a610 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
1a620 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
1a630 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
1a640 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
1a650 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
1a660 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1a670 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
1a680 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1a690 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
1a6a0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
1a6b0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
1a6c0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1a6d0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1a6e0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
1a6f0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1a700 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
1a710 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
1a720 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
1a730 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
1a740 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
1a750 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
1a760 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1a770 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1a780 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
1a790 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a7a0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1a7b0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
1a7c0 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
1a7d0 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
1a7e0 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
1a7f0 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
1a800 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
1a810 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
1a820 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
1a830 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
1a840 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
1a850 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1a860 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
1a870 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
1a880 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
1a890 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
1a8a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1a8b0 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
1a8c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a8d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1a8e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
1a8f0 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
1a900 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
1a910 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
1a920 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
1a930 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
1a940 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
1a950 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
1a960 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
1a970 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
1a980 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
1a990 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
1a9a0 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
1a9b0 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
1a9c0 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
1a9d0 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
1a9e0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
1a9f0 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
1aa00 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
1aa10 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1aa20 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
1aa30 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
1aa40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
1aa50 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
1aa60 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
1aa70 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
1aa80 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1aa90 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
1aaa0 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
1aab0 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
1aac0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
1aad0 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
1aae0 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
1aaf0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
1ab00 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
1ab10 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
1ab20 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
1ab30 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
1ab40 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
1ab50 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
1ab60 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
1ab70 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
1ab80 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
1ab90 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
1aba0 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
1abb0 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
1abc0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1abd0 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
1abe0 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
1abf0 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
1ac00 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
1ac10 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
1ac20 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
1ac30 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
1ac40 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
1ac50 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
1ac60 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
1ac70 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
1ac80 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
1ac90 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
1aca0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
1acb0 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
1acc0 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
1acd0 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
1ace0 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
1acf0 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
1ad00 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
1ad10 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
1ad20 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
1ad30 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
1ad40 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
1ad50 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1ad60 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
1ad70 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
1ad80 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
1ad90 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
1ada0 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
1adb0 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
1adc0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1add0 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
1ade0 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
1adf0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1ae00 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
1ae10 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
1ae20 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
1ae30 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
1ae40 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
1ae50 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
1ae60 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
1ae70 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
1ae80 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
1ae90 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
1aea0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
1aeb0 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
1aec0 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
1aed0 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
1aee0 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
1aef0 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
1af00 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1af10 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
1af20 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
1af30 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
1af40 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
1af50 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
1af60 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
1af70 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
1af80 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
1af90 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
1afa0 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
1afb0 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
1afc0 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
1afd0 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
1afe0 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
1aff0 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
1b000 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
1b010 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
1b020 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
1b030 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
1b040 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
1b050 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
1b060 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65  eta = 0;..  asse
1b070 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b080 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1b090 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
1b0a0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
1b0b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b0c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1b0d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1b0e0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1b0f0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
1b100 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
1b110 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
1b120 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
1b130 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
1b140 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
1b150 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
1b160 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b170 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
1b180 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1b190 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
1b1a0 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
1b1b0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1b1c0 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
1b1d0 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20 20  2, &iMeta);.    
1b1e0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1b1f0 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
1b200 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
1b210 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1b220 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
1b230 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b240 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
1b250 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
1b260 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
1b270 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
1b280 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
1b290 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
1b2a0 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  c;.        goto 
1b2b0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1b2c0 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
1b2d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b2e0 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
1b2f0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
1b300 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
1b310 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
1b320 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
1b330 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
1b340 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
1b350 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1b360 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
1b370 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
1b380 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
1b390 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1b3a0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1b3b0 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
1b3c0 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
1b3d0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
1b3e0 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
1b3f0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
1b400 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
1b410 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
1b420 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1b430 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
1b440 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
1b450 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
1b460 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
1b470 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1b480 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b490 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b4a0 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
1b4b0 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
1b4c0 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
1b4d0 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
1b4e0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
1b4f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
1b500 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
1b510 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
1b520 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
1b530 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
1b540 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
1b550 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1b560 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
1b570 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
1b580 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
1b590 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
1b5a0 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
1b5b0 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
1b5c0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1b5d0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
1b5e0 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
1b5f0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1b600 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1b610 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1b620 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b630 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
1b640 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28 69  pOp->p5.   && (i
1b650 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20 20  Meta!=pOp->p3.  
1b660 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b 70      || db->aDb[p
1b670 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
1b680 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70 4f  >iGeneration!=pO
1b690 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20 20  p->p4.i).  ){.  
1b6a0 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c    /*.    ** IMPL
1b6b0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1b6c0 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20  -03189-51135 As 
1b6d0 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65  each SQL stateme
1b6e0 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68  nt runs, the sch
1b6f0 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69  ema.    ** versi
1b700 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f  on is checked to
1b710 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
1b720 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20   schema has not 
1b730 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68  changed since th
1b740 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61  e.    ** SQL sta
1b750 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61  tement was prepa
1b760 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  red..    */.    
1b770 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1b780 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
1b790 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
1b7a0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1b7b0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
1b7c0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
1b7d0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
1b7e0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
1b7f0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1b800 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
1b810 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
1b820 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
1b830 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
1b840 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
1b850 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
1b860 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
1b870 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
1b880 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1b890 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1b8a0 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
1b8b0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
1b8c0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
1b8d0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
1b8e0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
1b8f0 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
1b900 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
1b910 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
1b920 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
1b930 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
1b940 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
1b950 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
1b960 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
1b970 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
1b980 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
1b990 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
1b9a0 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
1b9b0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
1b9c0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
1b9d0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
1b9e0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
1b9f0 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
1ba00 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
1ba10 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
1ba20 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
1ba30 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
1ba40 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
1ba50 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
1ba60 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
1ba70 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
1ba80 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
1ba90 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
1baa0 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
1bab0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
1bac0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1bad0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1bae0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
1baf0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
1bb00 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
1bb10 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
1bb20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
1bb30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1bb40 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66  SCHEMA;.  }.  if
1bb50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1bb60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bb70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1bb80 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
1bb90 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
1bba0 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
1bbb0 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
1bbc0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
1bbd0 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
1bbe0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
1bbf0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1bc00 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
1bc10 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1bc20 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
1bc30 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1bc40 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1bc50 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
1bc60 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
1bc70 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1bc80 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
1bc90 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
1bca0 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
1bcb0 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
1bcc0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1bcd0 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
1bce0 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
1bcf0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
1bd00 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
1bd10 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
1bd20 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
1bd30 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
1bd40 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
1bd50 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
1bd60 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
1bd70 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
1bd80 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
1bd90 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
1bda0 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1bdb0 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
1bdc0 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
1bdd0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1bde0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
1bdf0 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
1be00 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1be10 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
1be20 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1be30 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1be40 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1be50 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
1be60 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
1be70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1be80 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1be90 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
1bea0 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1beb0 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
1bec0 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
1bed0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1bee0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
1bef0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
1bf00 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
1bf10 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
1bf20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
1bf30 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1bf40 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1bf50 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
1bf60 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  e P3 into cookie
1bf70 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
1bf80 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32  tabase P1..** P2
1bf90 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1bfa0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d  a version.  P2==
1bfb0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1bfc0 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d  e format..** P2=
1bfd0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1bfe0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1bff0 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
1c000 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1c010 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1c020 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1c030 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
1c040 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1c050 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
1c060 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1c070 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
1c080 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
1c090 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
1c0a0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1c0b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
1c0c0 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44  okie: {.  Db *pD
1c0d0 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  b;..  sqlite3Vdb
1c0e0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
1c0f0 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  r(p, 0);.  asser
1c100 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1c110 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1c120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c130 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c140 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1c150 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c160 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c170 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1c180 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1c190 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1c1a0 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1c1b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1c1c0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1c1d0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c1e0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1c1f0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1c200 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1c210 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1c220 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1c230 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1c240 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1c250 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1c260 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1c270 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1c280 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1c290 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1c2a0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1c2b0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1c2c0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1c2d0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1c2e0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1c2f0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1c300 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1c310 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1c320 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1c330 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20  Change;.  }else 
1c340 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1c350 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1c360 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1c370 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1c380 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1c390 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1c3a0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1c3b0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1c3c0 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1c3d0 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1c3e0 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1c3f0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1c400 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1c410 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1c420 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1c430 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1c440 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1c450 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1c460 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 70  ts(db, 0);.    p
1c470 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
1c480 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1c490 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c4a0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1c4b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1c4c0 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
1c4d0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1c4e0 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1c4f0 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1c500 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
1c510 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1c520 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
1c530 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
1c540 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
1c550 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
1c560 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
1c570 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
1c580 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
1c590 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
1c5a0 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
1c5b0 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1c5c0 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1c5d0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1c5e0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1c5f0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1c600 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1c610 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1c620 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1c630 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1c640 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1c650 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1c660 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1c670 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1c680 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1c690 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1c6a0 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1c6b0 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1c6c0 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73   Allowed P5 bits
1c6d0 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69  :.** <ul>.** <li
1c6e0 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41  >  <b>0x02 OPFLA
1c6f0 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68  G_SEEKEQ</b>: Th
1c700 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f  is cursor will o
1c710 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a  nly be used for.
1c720 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74  **       equalit
1c730 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65  y lookups (imple
1c740 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72  mented as a pair
1c750 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53   of opcodes OP_S
1c760 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a  eekGE/OP_IdxGT.*
1c770 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65  *       of OP_Se
1c780 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a  ekLE/OP_IdxGT).*
1c790 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68  * </ul>.**.** Th
1c7a0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1c7b0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1c7c0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1c7d0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1c7e0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1c7f0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1c800 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1c810 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1c820 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20  nfo .** object, 
1c830 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e 67  then table being
1c840 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20   opened must be 
1c850 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65  an [index b-tree
1c860 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b  ] where the.** K
1c870 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65  eyInfo object de
1c880 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1c890 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1c8a0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1c8b0 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72 65  that index b-tre
1c8c0 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  e. Otherwise, if
1c8d0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1c8e0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65  r .** value, the
1c8f0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
1c900 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65  g opened must be
1c910 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65 65   a [table b-tree
1c920 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62  ] with a.** numb
1c930 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f  er of columns no
1c940 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 76   less than the v
1c950 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a  alue of P4..**.*
1c960 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1c970 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1c980 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1c990 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1c9a0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c9b0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c9c0 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1c9d0 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1c9e0 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1c9f0 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1ca00 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68  t it first.** ch
1ca10 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
1ca20 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20  he cursor on P1 
1ca30 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  is already open 
1ca40 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 62  on the same.** b
1ca50 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69 74 20  -tree and if it 
1ca60 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1ca70 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1ca80 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1ca90 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1caa0 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1cab0 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1cac0 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1cad0 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1cae0 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1caf0 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72 20 50   with P5==0 or P
1cb00 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1cb10 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50 34 20  .** and with P4 
1cb20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59 49 4e  being a P4_KEYIN
1cb30 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1cb40 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1cb50 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20 62 65  value must.** be
1cb60 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 76 65   the same as eve
1cb70 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1cb80 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1cb90 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1cba0 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a  or.** number..**
1cbb0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62  .** Allowed P5 b
1cbc0 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  its:.** <ul>.** 
1cbd0 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50  <li>  <b>0x02 OP
1cbe0 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a  FLAG_SEEKEQ</b>:
1cbf0 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c   This cursor wil
1cc00 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66  l only be used f
1cc10 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61  or.**       equa
1cc20 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d  lity lookups (im
1cc30 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70  plemented as a p
1cc40 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f  air of opcodes O
1cc50 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47  P_SeekGE/OP_IdxG
1cc60 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50  T.**       of OP
1cc70 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54  _SeekLE/OP_IdxGT
1cc80 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ).** </ul>.**.**
1cc90 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70   See also: OP_Op
1cca0 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65 6e 57  enRead, OP_OpenW
1ccb0 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  rite.*/./* Opcod
1ccc0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1ccd0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1cce0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1ccf0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1cd00 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1cd10 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1cd20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1cd30 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1cd40 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 20 28  .** page is P2 (
1cd50 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  or whose root pa
1cd60 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20 72 65  ge is held in re
1cd70 67 69 73 74 65 72 20 50 32 20 69 66 20 74 68 65  gister P2 if the
1cd80 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  .** OPFLAG_P2ISR
1cd90 45 47 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  EG bit is set in
1cda0 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f 77 29   P5 - see below)
1cdb0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1cdc0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1cdd0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1cde0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1cdf0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1ce00 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1ce10 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1ce20 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1ce30 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1ce40 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74  * object, then t
1ce50 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1ce60 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e  d must be an [in
1ce70 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72  dex b-tree] wher
1ce80 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f  e the.** KeyInfo
1ce90 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20   object defines 
1cea0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1ceb0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1cec0 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69  quence of that i
1ced0 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68  ndex b-tree. Oth
1cee0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1cef0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1cf00 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
1cf10 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1cf20 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61  ed must be a [ta
1cf30 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68  ble b-tree] with
1cf40 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20   a.** number of 
1cf50 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20  columns no less 
1cf60 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  than the value o
1cf70 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  f P4..**.** Allo
1cf80 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20  wed P5 bits:.** 
1cf90 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  <ul>.** <li>  <b
1cfa0 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45  >0x02 OPFLAG_SEE
1cfb0 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  KEQ</b>: This cu
1cfc0 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  rsor will only b
1cfd0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20  e used for.**   
1cfe0 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f      equality loo
1cff0 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65  kups (implemente
1d000 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f  d as a pair of o
1d010 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45  pcodes OP_SeekGE
1d020 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20  /OP_IdxGT.**    
1d030 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f     of OP_SeekLE/
1d040 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 6c 69  OP_IdxGT).** <li
1d050 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46 4c 41  >  <b>0x08 OPFLA
1d060 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62 3e 3a  G_FORDELETE</b>:
1d070 20 54 68 69 73 20 63 75 72 73 6f 72 20 69 73 20   This cursor is 
1d080 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73 65 65  used only to see
1d090 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 73  k.**       and s
1d0a0 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65 6c 65  ubsequently dele
1d0b0 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e  te entries in an
1d0c0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 54   index btree.  T
1d0d0 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20 20 20  his is a.**     
1d0e0 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20 73 74    hint to the st
1d0f0 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74 68 61  orage engine tha
1d100 74 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e  t the storage en
1d110 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  gine is allowed 
1d120 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67 6e 6f  to.**       igno
1d130 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20 69 73  re.  The hint is
1d140 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65   not used by the
1d150 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69 74 65   official SQLite
1d160 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67 65 0a   b*tree storage.
1d170 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e 65 2c  **       engine,
1d180 20 62 75 74 20 69 73 20 75 73 65 64 20 62 79 20   but is used by 
1d190 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20  COMDB2..** <li> 
1d1a0 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41 47 5f   <b>0x10 OPFLAG_
1d1b0 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55 73 65  P2ISREG</b>: Use
1d1c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1d1d0 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 20  register P2.**  
1d1e0 20 20 20 20 20 61 73 20 74 68 65 20 72 6f 6f 74       as the root
1d1f0 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65 20 76   page, not the v
1d200 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
1d210 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a  f..** </ul>.**.*
1d220 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1d230 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 70  on works like Op
1d240 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1d250 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1d260 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1d270 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a  d/write mode..**
1d280 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50  .** See also: OP
1d290 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 52 65  _OpenRead, OP_Re
1d2a0 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73 65 20  openIdx.*/.case 
1d2b0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1d2c0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1d2d0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1d2e0 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1d2f0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1d300 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1d310 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1d320 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1d330 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1d340 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1d350 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1d360 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1d370 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1d380 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1d390 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d3a0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1d3b0 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1d3c0 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1d3d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1d3e0 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1d3f0 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1d400 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1d410 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1d420 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1d430 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1d440 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1d450 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1d460 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1d470 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1d480 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1d490 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1d4a0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1d4b0 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1d4c0 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1d4d0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1d4e0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1d4f0 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1d500 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1d510 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1d520 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1d530 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1d540 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1d550 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1d560 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1d570 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1d580 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1d590 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1d5a0 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1d5b0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1d5c0 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d 31 20  ( p->expired==1 
1d5d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1d5e0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1d5f0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1d600 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d610 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1d620 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1d630 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1d640 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1d650 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1d660 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1d670 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1d680 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1d690 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1d6a0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1d6b0 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1d6c0 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1d6d0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1d6e0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1d6f0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1d700 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1d710 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1d720 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1d730 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1d740 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1d750 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1d760 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1d770 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1d780 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1d790 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1d7a0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1d7b0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1d7c0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1d7d0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1d7e0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1d7f0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1d800 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1d810 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1d820 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1d830 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1d840 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1d850 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1d860 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1d870 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1d880 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1d890 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  or) );.    asser
1d8a0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1d8b0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 3b 0a  OP_OpenWrite );.
1d8c0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1d8d0 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1d8e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1d8f0 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1d900 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1d910 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1d920 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1d930 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1d940 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1d950 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1d960 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1d970 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1d980 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1d990 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
1d9a0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1d9b0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1d9c0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1d9d0 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1d9e0 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1d9f0 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1da00 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1da10 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1da20 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1da30 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1da40 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1da50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1da60 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
1da70 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20   p2>=2 );.  }.  
1da80 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1da90 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1daa0 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1dab0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1dac0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1dad0 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1dae0 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  b) );.    assert
1daf0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1db00 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  db );.    nField
1db10 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c   = pKeyInfo->nAl
1db20 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20  lField;.  }else 
1db30 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1db40 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
1db50 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1db60 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
1db70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1db80 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
1db90 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61  d>=0 );.  testca
1dba0 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b  se( nField==0 );
1dbb0 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20    /* Table with 
1dbc0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1dbd0 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20  KEY and nothing 
1dbe0 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d  else */.  pCur =
1dbf0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1dc00 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1dc10 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45  ld, iDb, CURTYPE
1dc20 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1dc30 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1dc40 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1dc50 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1dc60 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1dc70 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1dc80 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20  ot = p2;.#ifdef 
1dc90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1dca0 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72  Cur->wrFlag = wr
1dcb0 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Flag;.#endif.  r
1dcc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1dcd0 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
1dce0 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
1dcf0 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f   pCur->uc.pCurso
1dd00 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1dd10 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1dd20 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1dd30 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1dd40 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1dd50 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1dd60 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1dd70 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1dd80 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1dd90 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1dda0 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1ddb0 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1ddc0 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1ddd0 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1dde0 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1ddf0 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1de00 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1de10 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1de20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1de30 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1de40 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1de50 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1de60 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1de70 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1de80 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1de90 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1dea0 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1deb0 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61  K_EQ );.  testca
1dec0 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  se( pOp->p5 & OP
1ded0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a  FLAG_BULKCSR );.
1dee0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1def0 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
1df00 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  S.  testcase( pO
1df10 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53  p->p2 & OPFLAG_S
1df20 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a  EEKEQ );.#endif.
1df30 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1df40 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43  rsorHintFlags(pC
1df50 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a  ur->uc.pCursor,.
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1df80 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1df90 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1dfa0 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66  _SEEKEQ)));.  if
1dfb0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1dfc0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1dfd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1dfe0 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70 20 50  pcode: OpenDup P
1dff0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1e000 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1e010 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69 6e 74  or P1 that point
1e020 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20 65 70  s to the same ep
1e030 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 61 73  hemeral table as
1e040 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e 20 20  .** cursor P2.  
1e050 54 68 65 20 50 32 20 63 75 72 73 6f 72 20 6d 75  The P2 cursor mu
1e060 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f 70 65  st have been ope
1e070 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72 20 4f  ned by a prior O
1e080 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 0a  P_OpenEphemeral.
1e090 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e 6c 79  ** opcode.  Only
1e0a0 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
1e0b0 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63  rs may be duplic
1e0c0 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c  ated..**.** Dupl
1e0d0 69 63 61 74 65 20 65 70 68 65 6d 65 72 61 6c 20  icate ephemeral 
1e0e0 63 75 72 73 6f 72 73 20 61 72 65 20 75 73 65 64  cursors are used
1e0f0 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e 73 20   for self-joins 
1e100 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65 64 20  of materialized 
1e110 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  views..*/.case O
1e120 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20 20 56  P_OpenDup: {.  V
1e130 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72 69 67  dbeCursor *pOrig
1e140 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67  ;    /* The orig
1e150 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f 20 62  inal cursor to b
1e160 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a  e duplicated */.
1e170 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e180 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  x;      /* The n
1e190 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a 20 20  ew cursor */..  
1e1a0 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43 73 72  pOrig = p->apCsr
1e1b0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
1e1c0 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42 74 78  ert( pOrig->pBtx
1e1d0 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
1e1e0 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
1e1f0 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69 63 61  s can be duplica
1e200 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20 3d 20  ted */..  pCx = 
1e210 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1e220 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72 69 67  , pOp->p1, pOrig
1e230 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20 43 55  ->nField, -1, CU
1e240 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1e250 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1e260 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1e270 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1e280 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1e290 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 4b 65   = 1;.  pCx->pKe
1e2a0 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d 3e 70  yInfo = pOrig->p
1e2b0 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e  KeyInfo;.  pCx->
1e2c0 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69 67 2d  isTable = pOrig-
1e2d0 3e 69 73 54 61 62 6c 65 3b 0a 20 20 72 63 20 3d  >isTable;.  rc =
1e2e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1e2f0 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c  sor(pOrig->pBtx,
1e300 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54   MASTER_ROOT, BT
1e310 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
1e340 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1e350 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73  sor);.  /* The s
1e360 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e370 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20  r() routine can 
1e380 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74 68  only fail for th
1e390 65 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a 20  e first cursor. 
1e3a0 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20 61   ** opened for a
1e3b0 20 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e 63   database.  Sinc
1e3c0 65 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  e there is alrea
1e3d0 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  dy an open curso
1e3e0 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a  r when this.  **
1e3f0 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c 20   opcode is run, 
1e400 74 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65  the sqlite3Btree
1e410 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20  Cursor() cannot 
1e420 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
1e430 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1e440 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
1e450 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1e460 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1e470 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1e480 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1e490 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1e4a0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1e4b0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1e4c0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1e4d0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1e4e0 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1e4f0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1e500 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1e510 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1e520 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1e530 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1e540 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1e550 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1e560 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1e570 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1e580 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1e590 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1e5a0 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1e5b0 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1e5c0 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1e5d0 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1e5e0 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1e5f0 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1e600 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1e610 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1e620 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1e630 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1e640 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1e650 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1e660 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1e670 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1e680 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1e690 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1e6a0 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1e6b0 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1e6c0 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1e6d0 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1e6e0 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1e6f0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1e700 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1e710 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1e720 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1e730 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1e740 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1e750 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1e760 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1e770 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1e780 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1e790 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1e7a0 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1e7b0 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1e7c0 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1e7d0 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1e7e0 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1e7f0 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1e800 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1e810 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1e820 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1e830 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1e840 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1e850 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1e860 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1e870 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1e880 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e890 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1e8a0 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1e8b0 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1e8c0 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1e8d0 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1e8e0 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1e8f0 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1e900 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1e910 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1e920 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1e930 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1e940 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1e950 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1e960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e970 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1e980 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1e990 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1e9a0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1e9b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1e9c0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1e9d0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1e9e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e9f0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1ea00 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  ;.  pCx->isEphem
1ea10 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d  eral = 1;.  rc =
1ea20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
1ea30 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
1ea40 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a  b, &pCx->pBtx, .
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1ea70 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1ea80 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1ea90 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1eaa0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1eab0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1eac0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1ead0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78  nTrans(pCx->pBtx
1eae0 2c 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69  , 1, 0);.  }.  i
1eaf0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1eb00 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20   ){.    /* If a 
1eb10 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1eb20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65  is required, cre
1eb30 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e  ate it by callin
1eb40 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  g.    ** sqlite3
1eb50 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1eb60 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
1eb70 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
1eb80 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65  efore.    ** ope
1eb90 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72  ning it. If a tr
1eba0 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73  ansient table is
1ebb0 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20   required, just 
1ebc0 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61  use the.    ** a
1ebd0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1ebe0 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
1ebf0 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
1ec00 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
1ec10 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
1ec20 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66  f( (pCx->pKeyInf
1ec30 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  o = pKeyInfo = p
1ec40 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
1ec50 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  !=0 ){.      int
1ec60 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
1ec70 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1ec80 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1ec90 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1eca0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1ecb0 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70  le(pCx->pBtx, &p
1ecc0 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gno, BTREE_BLOBK
1ecd0 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
1ece0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1ecf0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1ed00 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
1ed10 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
1ed20 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ed30 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1ed40 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  db );.        as
1ed50 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1ed60 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1ed70 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1ed80 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1ed90 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c  pCx->pBtx, pgno,
1eda0 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b                pK
1edd0 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e  eyInfo, pCx->uc.
1ede0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1edf0 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
1ee00 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
1ee10 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
1ee20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1ee30 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41  or(pCx->pBtx, MA
1ee40 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45  STER_ROOT, BTREE
1ee50 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63        0, pCx->uc
1ee80 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
1ee90 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1eea0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  1;.    }.  }.  i
1eeb0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1eec0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1eed0 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65  .  pCx->isOrdere
1eee0 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54  d = (pOp->p5!=BT
1eef0 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a  REE_UNORDERED);.
1ef00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ef10 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
1ef20 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  n P1 P2 P3 P4 *.
1ef30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1ef40 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1ef50 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
1ef60 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1ef70 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
1ef80 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
1ef90 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
1efa0 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
1efb0 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
1efc0 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
1efd0 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
1efe0 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ithm..**.** If a
1eff0 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f  rgument P3 is no
1f000 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  n-zero, then it 
1f010 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
1f020 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a  he sorter may.**
1f030 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73   assume that a s
1f040 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69  table sort consi
1f050 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  dering the first
1f060 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61   P3 fields of ea
1f070 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66  ch.** key is suf
1f080 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75  ficient to produ
1f090 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20  ce the required 
1f0a0 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65  results..*/.case
1f0b0 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1f0c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1f0d0 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1f0e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1f0f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1f100 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1f110 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1f120 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1f130 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f  , -1, CURTYPE_SO
1f140 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78  RTER);.  if( pCx
1f150 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1f160 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1f170 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1f180 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1f190 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1f1a0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
1f1b0 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1f1c0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1f1d0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1f1e0 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
1f1f0 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
1f200 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1f210 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1f220 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1f230 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1f240 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32  quenceTest P1 P2
1f250 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1f260 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50  is: if( cursor[P
1f270 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20  1].ctr++ ) pc = 
1f280 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
1f290 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
1f2a0 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  If the sequence 
1f2b0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
1f2c0 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a  ntly zero, jump.
1f2d0 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64  ** to P2. Regard
1f2e0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
1f2f0 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
1f300 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d  is taken, increm
1f310 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73  ent the.** the s
1f320 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a  equence value..*
1f330 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1f340 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65  ceTest: {.  Vdbe
1f350 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1f360 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f370 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1f380 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f390 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f3a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
1f3b0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
1f3c0 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1f3d0 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  t++)==0 ){.    g
1f3e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1f3f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1f400 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
1f410 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
1f420 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f430 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b  P3 columns in r[
1f440 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P2].**.** Open a
1f450 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
1f460 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
1f470 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
1f480 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
1f490 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
1f4a0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
1f4b0 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74  hat one row is t
1f4c0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
1f4d0 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
1f4e0 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
1f4f0 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
1f500 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
1f510 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
1f520 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
1f530 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
1f540 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
1f550 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1f560 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1f570 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1f580 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1f590 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1f5a0 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1f5b0 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1f5c0 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1f5d0 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1f5e0 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1f5f0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1f600 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1f610 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1f620 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1f630 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1f640 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1f650 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1f660 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1f670 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1f680 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1f690 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1f6a0 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1f6b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1f6c0 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1f6d0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1f6e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f6f0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1f700 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
1f710 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1f720 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1f730 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1f740 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b  CURTYPE_PSEUDO);
1f750 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1f760 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1f770 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1f780 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1f790 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  lt = pOp->p2;.  
1f7a0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1f7b0 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73  ;.  /* Give this
1f7c0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
1f7d0 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70   fake BtCursor p
1f7e0 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70  ointer so that p
1f7f0 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73  Cx.  ** can be s
1f800 61 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20  afely passed to 
1f810 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1f820 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73  rMoveto().  This
1f830 20 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20   avoids a test. 
1f840 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75   ** for pCx->eCu
1f850 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f860 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73  TREE inside of s
1f870 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1f880 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68  Moveto().  ** wh
1f890 69 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d  ich is a perform
1f8a0 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ance optimizatio
1f8b0 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70  n */.  pCx->uc.p
1f8c0 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33  Cursor = sqlite3
1f8d0 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75  BtreeFakeValidCu
1f8e0 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74  rsor();.  assert
1f8f0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1f900 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f910 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
1f920 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
1f930 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
1f940 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
1f950 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
1f960 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
1f970 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
1f980 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
1f990 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
1f9a0 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
1f9b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f9c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f9d0 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
1f9e0 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1f9f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1fa00 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
1fa10 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
1fa20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
1fa30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1fa40 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a  OLUMN_USED_MASK.
1fa50 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
1fa60 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34  nsUsed P1 * * P4
1fa70 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1fa80 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79  code (which only
1fa90 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74   exists if SQLit
1faa0 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
1fab0 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ith.** SQLITE_EN
1fac0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1fad0 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65  _MASK) identifie
1fae0 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  s which columns 
1faf0 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  of the.** table 
1fb00 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72  or index for cur
1fb10 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e  sor P1 are used.
1fb20 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74    P4 is a 64-bit
1fb30 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f   integer.** (P4_
1fb40 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20  INT64) in which 
1fb50 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74  the first 63 bit
1fb60 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61  s are one for ea
1fb70 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72  ch of the.** fir
1fb80 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  st 63 columns of
1fb90 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1fba0 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74  dex that are act
1fbb0 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79  ually used.** by
1fbc0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
1fbd0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1fbe0 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63   is set if any c
1fbf0 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74  olumn after.** t
1fc00 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e  he 64th is used.
1fc10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
1fc20 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62  mnsUsed: {.  Vdb
1fc30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70  eCursor *pC;.  p
1fc40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1fc50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1fc60 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
1fc70 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
1fc80 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d    pC->maskUsed =
1fc90 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e   *(u64*)pOp->p4.
1fca0 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
1fcb0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
1fcc0 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1fcd0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1fce0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1fcf0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1fd00 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1fd10 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1fd20 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1fd30 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1fd40 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1fd50 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1fd60 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1fd70 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1fd80 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1fd90 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1fda0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1fdb0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1fdc0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1fdd0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1fde0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1fdf0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1fe00 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1fe10 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1fe20 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1fe30 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1fe40 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1fe50 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1fe60 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1fe70 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1fe80 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1fe90 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1fea0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1feb0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1fec0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1fed0 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1fee0 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1fef0 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1ff00 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1ff10 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1ff20 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1ff30 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1ff40 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1ff50 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1ff60 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1ff70 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1ff80 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1ff90 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1ffa0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1ffb0 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1ffc0 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63   by an IdxLE opc
1ffd0 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1ffe0 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1fff0 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  The IdxLE opcode
20000 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
20010 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
20020 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
20030 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64  e.** IdxLE opcod
20040 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
20050 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
20060 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
20070 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20080 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20090 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
200a0 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
200b0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
200c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
200d0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
200e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
200f0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
20100 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
20110 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
20120 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20130 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20140 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
20150 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
20160 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
20170 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20180 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20190 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
201a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
201b0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
201c0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
201d0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
201e0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
201f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
20200 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
20210 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20220 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
20230 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
20240 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
20250 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
20260 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
20270 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
20280 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
20290 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
202a0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
202b0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
202c0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
202d0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
202e0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
202f0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
20300 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
20310 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
20320 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
20330 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
20340 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
20350 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
20360 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
20370 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
20380 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
20390 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
203a0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
203b0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
203c0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
203d0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
203e0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
203f0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
20400 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
20410 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
20420 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
20430 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
20440 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
20450 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
20460 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
20470 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20480 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
20490 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
204a0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
204b0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
204c0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
204d0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
204e0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
204f0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
20500 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
20510 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
20520 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
20530 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
20540 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
20550 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
20560 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
20570 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
20580 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
20590 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
205a0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
205b0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
205c0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
205d0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
205e0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
205f0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
20600 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
20610 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
20620 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
20630 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
20640 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
20650 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
20660 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
20670 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
20680 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
20690 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
206a0 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
206b0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
206c0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
206d0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
206e0 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
206f0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20700 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
20710 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
20720 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
20730 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
20740 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20750 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20760 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
20770 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
20780 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
20790 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
207a0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
207b0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
207c0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
207d0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
207e0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
207f0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
20800 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
20810 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
20820 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
20830 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
20840 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
20850 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
20860 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
20870 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
20880 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
20890 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
208a0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
208b0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
208c0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
208d0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
208e0 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
208f0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
20900 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
20910 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
20920 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
20930 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
20940 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
20950 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
20960 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
20970 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
20980 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
20990 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
209a0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
209b0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
209c0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
209d0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
209e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
209f0 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
20a00 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
20a10 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
20a20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
20a30 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
20a40 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
20a50 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
20a60 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
20a70 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
20a80 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
20a90 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
20aa0 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
20ab0 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
20ac0 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
20ad0 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20  wed by an IdxGE 
20ae0 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
20af0 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
20b00 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63  ** The IdxGE opc
20b10 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
20b20 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
20b30 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
20b40 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70   the.** IdxGE op
20b50 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
20b60 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
20b70 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
20b80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20b90 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20ba0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
20bb0 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
20bc0 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
20bd0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
20be0 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20  , group */.case 
20bf0 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20  OP_SeekLE:      
20c00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
20c10 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f   group */.case O
20c20 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20  P_SeekGE:       
20c30 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
20c40 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
20c50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
20c60 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
20c70 72 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65  roup */.  int re
20c80 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
20c90 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
20ca0 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20  t */.  int oc;  
20cb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
20cc0 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ode */.  VdbeCur
20cd0 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
20ce0 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65  he cursor to see
20cf0 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52  k */.  UnpackedR
20d00 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65  ecord r;  /* The
20d10 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72   key to seek for
20d20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
20d30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
20d40 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er of columns or
20d50 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b   fields in the k
20d60 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  ey */.  i64 iKey
20d70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
20d80 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
20d90 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69  o seek to */.  i
20da0 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20  nt eqOnly;      
20db0 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65    /* Only intere
20dc0 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c  sted in == resul
20dd0 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ts */..  assert(
20de0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20df0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20e00 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
20e10 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
20e20 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20e30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20e40 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
20e50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
20e60 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
20e70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
20e80 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekLE == OP_See
20e90 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLT+1 );.  asser
20ea0 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20  t( OP_SeekGE == 
20eb0 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20  OP_SeekLT+2 );. 
20ec0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
20ed0 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GT == OP_SeekLT+
20ee0 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
20ef0 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
20f00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
20f10 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
20f20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
20f30 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b  e;.  eqOnly = 0;
20f40 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
20f50 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
20f60 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
20f70 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
20f80 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  de;.#endif..  if
20f90 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
20fa0 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45  .    /* The BTRE
20fb0 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69  E_SEEK_EQ flag i
20fc0 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e  s only set on in
20fd0 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  dex cursors */. 
20fe0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
20ff0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
21000 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
21010 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
21020 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  EQ)==0.         
21030 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f       || CORRUPT_
21040 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  DB );..    /* Th
21050 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
21060 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
21070 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
21080 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
21090 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
210a0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
210b0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
210c0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
210d0 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
210e0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
210f0 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
21100 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
21110 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
21120 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
21130 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
21140 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
21150 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
21160 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
21170 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
21180 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
21190 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
211a0 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  n3);..    /* If 
211b0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
211c0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
211d0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
211e0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
211f0 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
21200 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
21210 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
21220 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
21230 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
21240 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
21250 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
21260 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
21270 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
21280 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
21290 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
212a0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
212b0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
212c0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
212d0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
212e0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
212f0 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
21300 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64  P2 */.        Vd
21310 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
21320 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2); goto jump_to
21330 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65  _p2;.        bre
21340 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ak;.      }..   
21350 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
21360 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
21370 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  is larger than t
21380 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
21390 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
213a0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
213b0 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66  >= for > and < f
213c0 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74  or <=. e.g. if t
213d0 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20  he search term. 
213e0 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61       ** is 4.9 a
213f0 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  nd the integer a
21400 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a  pproximation 5:.
21410 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
21420 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34  *        (x >  4
21430 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
21440 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20   >= 5).      ** 
21450 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39         (x <= 4.9
21460 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c  )    ->     (x <
21470 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20    5).      */.  
21480 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
21490 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r<(double)iKey )
214a0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
214b0 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50  ( OP_SeekGE==(OP
214c0 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20  _SeekGT-1) );.  
214d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
214e0 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65  _SeekLT==(OP_See
214f0 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kLE-1) );.      
21500 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
21510 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLE & 0x0001)==
21520 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
21530 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
21540 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
21550 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
21560 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a  0x0001) ) oc--;.
21570 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
21580 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
21590 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73  mation iKey is s
215a0 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20  maller than the 
215b0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
215c0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
215d0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20  , substitute <= 
215e0 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20  for < and > for 
215f0 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c  >=.  */.      el
21600 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72  se if( pIn3->u.r
21610 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  >(double)iKey ){
21620 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21630 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f   OP_SeekLE==(OP_
21640 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20  SeekLT+1) );.   
21650 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
21660 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGT==(OP_Seek
21670 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GE+1) );.       
21680 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
21690 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLT & 0x0001)==(
216a0 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30  OP_SeekGE & 0x00
216b0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
216c0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
216d0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ==(OP_SeekLT & 0
216e0 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20  x0001) ) oc++;. 
216f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20       }.    } .  
21700 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21710 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21720 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
21730 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
21740 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  0, &res);.    pC
21750 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
21760 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
21770 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
21780 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
21790 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
217a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
217b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
217c0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f  }else{.    /* Fo
217d0 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20  r a cursor with 
217e0 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  the BTREE_SEEK_E
217f0 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65  Q hint, only the
21800 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20   OP_SeekGE and. 
21810 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20     ** OP_SeekLE 
21820 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f  opcodes are allo
21830 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d  wed, and these m
21840 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65  ust be immediate
21850 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20  ly followed.    
21860 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47  ** by an OP_IdxG
21870 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70  T or OP_IdxLT op
21880 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65  code, respective
21890 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d  ly, with the sam
218a0 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20  e key..    */.  
218b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72    if( sqlite3Btr
218c0 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
218d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
218e0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29  BTREE_SEEK_EQ) )
218f0 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d  {.      eqOnly =
21900 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
21910 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21920 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d  P_SeekGE || pOp-
21930 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
21940 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
21950 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
21960 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
21970 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
21980 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20  _IdxGT );.      
21990 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
219a0 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a  1==pOp[0].p1 );.
219b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
219c0 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p2==pOp[0].
219d0 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p2 );.      asse
219e0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70  rt( pOp[1].p3==p
219f0 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20  Op[0].p3 );.    
21a00 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
21a10 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34  .p4.i==pOp[0].p4
21a20 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  .i );.    }..   
21a30 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
21a40 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  4.i;.    assert(
21a50 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
21a60 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73  _INT32 );.    as
21a70 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
21a80 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
21a90 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
21aa0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
21ab0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
21ac0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
21ad0 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
21ae0 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
21af0 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
21b00 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
21b10 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGT || oc==O
21b20 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20  P_SeekLE ){.    
21b30 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74  **     r.default
21b40 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a  _rc = -1;.    **
21b50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a     }else{.    **
21b60 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
21b70 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20  c = +1;.    **  
21b80 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e   }.    */.    r.
21b90 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31  default_rc = ((1
21ba0 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
21bb0 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b  LT)) ? -1 : +1);
21bc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
21bd0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e  =OP_SeekGT || r.
21be0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
21bf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
21c00 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72  !=OP_SeekLE || r
21c10 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
21c20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
21c30 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c!=OP_SeekGE || 
21c40 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
21c50 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
21c60 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc!=OP_SeekLT ||
21c70 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
21c80 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d  1 );..    r.aMem
21c90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21ca0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
21cb0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
21cc0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
21cd0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
21ce0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
21cf0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
21d00 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 65  }.#endif.    r.e
21d10 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72  qSeen = 0;.    r
21d20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21d30 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21d40 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
21d50 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
21d60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
21d70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
21d80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21d90 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
21da0 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20    if( eqOnly && 
21db0 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20  r.eqSeen==0 ){. 
21dc0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
21dd0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74  !=0 );.      got
21de0 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  o seek_not_found
21df0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
21e00 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21e10 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21e20 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21e30 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
21e40 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
21e50 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
21e60 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
21e70 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
21e80 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
21e90 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
21ea0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
21eb0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
21ec0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
21ed0 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
21ee0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
21ef0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21f00 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75  eNext(pC->uc.pCu
21f10 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20  rsor, 0);.      
21f20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
21f30 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  K ){.        if(
21f40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
21f50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
21f60 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
21f70 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
21f80 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
21f90 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
21fa0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21fb0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
21fc0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
21fd0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
21fe0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
21ff0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
22000 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
22010 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
22020 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
22030 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
22040 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
22050 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
22060 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22070 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e  Previous(pC->uc.
22080 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20  pCursor, 0);.   
22090 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
220a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
220b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
220c0 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ONE ){.         
220d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
220e0 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
220f0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
22100 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  e{.          got
22110 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
22120 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
22130 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
22140 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
22150 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
22160 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
22170 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
22180 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
22190 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
221a0 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
221b0 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
221c0 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
221d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
221e0 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e      }.  }.seek_n
221f0 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65  ot_found:.  asse
22200 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
22210 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
22220 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
22230 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67  if( res ){.    g
22240 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
22250 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e    }else if( eqOn
22260 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ly ){.    assert
22270 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  ( pOp[1].opcode=
22280 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70  =OP_IdxLT || pOp
22290 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
222a0 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b  dxGT );.    pOp+
222b0 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f  +; /* Skip the O
222c0 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64  P_IdxLt or OP_Id
222d0 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  xGT that follows
222e0 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   */.  }.  break;
222f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
22300 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20 2a  eekHit P1 P2 * *
22310 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22320 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a  seekHit=P2.**.**
22330 20 53 65 74 20 74 68 65 20 73 65 65 6b 48 69 74   Set the seekHit
22340 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72 20   flag on cursor 
22350 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
22360 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  in P2..** The se
22370 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75 73  ekHit flag is us
22380 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48 6f  ed by the IfNoHo
22390 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  pe opcode..**.**
223a0 20 50 31 20 6d 75 73 74 20 62 65 20 61 20 76 61   P1 must be a va
223b0 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72 73 6f  lid b-tree curso
223c0 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20 61  r.  P2 must be a
223d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a   boolean value,.
223e0 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ** either 0 or 1
223f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
22400 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  kHit: {.  VdbeCu
22410 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
22420 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22430 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22440 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22450 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22470 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22480 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p2==0 || pOp
22490 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d  ->p2==1 );.  pC-
224a0 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e  >seekHit = pOp->
224b0 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 & 1;.  break;
224c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
224d0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
224e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
224f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
22500 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
22510 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
22520 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
22530 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
22540 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
22550 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
22560 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
22570 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
22580 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
22590 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
225a0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
225b0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
225c0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
225d0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
225e0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
225f0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
22600 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
22610 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
22620 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
22630 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
22640 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
22650 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
22660 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
22670 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22680 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22690 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
226a0 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
226b0 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
226c0 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
226d0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
226e0 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
226f0 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
22700 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
22710 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
22720 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
22730 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
22740 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
22750 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
22760 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
22770 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
22780 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
22790 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
227a0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
227b0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
227c0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
227d0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
227e0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
227f0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
22800 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
22810 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
22820 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
22830 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
22840 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
22850 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
22860 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
22870 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
22880 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
22890 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
228a0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
228b0 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
228c0 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
228d0 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
228e0 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
228f0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
22900 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
22910 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
22920 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
22930 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
22940 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
22950 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
22960 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
22970 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
22980 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
22990 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
229a0 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
229b0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
229c0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
229d0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
229e0 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
229f0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
22a00 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
22a10 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
22a20 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
22a30 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
22a40 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f  t, IfNoHope.*/./
22a50 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f  * Opcode: IfNoHo
22a60 70 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  pe P1 P2 P3 P4 *
22a70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
22a80 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22a90 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
22aa0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
22ab0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
22ac0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
22ad0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
22ae0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
22af0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
22b00 20 20 49 66 20 74 68 65 20 73 65 65 6b 48 69 74    If the seekHit
22b10 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20   flag is set on 
22b20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  P1, then.** this
22b30 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d   opcode is a no-
22b40 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  op.  But if the 
22b50 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66 20  seekHit flag of 
22b60 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  P1 is clear, the
22b70 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73 65  n.** check to se
22b80 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
22b90 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
22ba0 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a 2a  at matches the.*
22bb0 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74 69 66  * prefix identif
22bc0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
22bd0 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d  .  If no entry m
22be0 61 74 63 68 65 73 20 74 68 65 20 70 72 65 66 69  atches the prefi
22bf0 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  x,.** jump to P2
22c00 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
22c10 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a  l through..**.**
22c20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65 68   This opcode beh
22c30 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74  aves like OP_Not
22c40 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65 65  Found if the see
22c50 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20  kHit.** flag is 
22c60 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65 68  clear and it beh
22c70 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f  aves like OP_Noo
22c80 70 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  p if the seekHit
22c90 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
22ca0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22cb0 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63 6c  is used in IN cl
22cc0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20  ause processing 
22cd0 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75  for a multi-colu
22ce0 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e  mn key..** If an
22cf0 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61 74   IN clause is at
22d00 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c 65  tached to an ele
22d10 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20  ment of the key 
22d20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a 2a  other than the.*
22d30 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d  * left-most elem
22d40 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65 72  ent, and if ther
22d50 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
22d60 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   on the most rec
22d70 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72  ent.** seek over
22d80 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20   the whole key, 
22d90 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62 65  then it might be
22da0 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65   that one of the
22db0 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20   key element.** 
22dc0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20 70  to the left is p
22dd0 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61 74  rohibiting a mat
22de0 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  ch, and hence th
22df0 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22  ere is "no hope"
22e00 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68   of.** any match
22e10 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
22e20 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73  ow many IN claus
22e30 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 63  e elements are c
22e40 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75  hecked..** In su
22e50 63 68 20 61 20 63 61 73 65 2c 20 77 65 20 61 62  ch a case, we ab
22e60 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61  andon the IN cla
22e70 75 73 65 20 73 65 61 72 63 68 20 65 61 72 6c 79  use search early
22e80 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20  , using this.** 
22e90 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70 63  opcode.  The opc
22ea0 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66  ode name comes f
22eb0 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
22ec0 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73  t the.** jump is
22ed0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65 20   taken if there 
22ee0 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20  is "no hope" of 
22ef0 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74 63  achieving a matc
22f00 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
22f10 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  o: NotFound, See
22f20 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  kHit.*/./* Opcod
22f30 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
22f40 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
22f50 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
22f60 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
22f70 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
22f80 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
22f90 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
22fa0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
22fb0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
22fc0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
22fd0 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
22fe0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
22ff0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
23000 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
23010 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
23020 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
23030 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
23040 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
23050 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
23060 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
23070 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
23080 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
23090 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
230a0 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
230b0 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
230c0 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
230d0 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
230e0 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
230f0 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
23100 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
23110 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
23120 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
23130 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
23140 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
23150 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
23160 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
23170 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
23180 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
23190 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
231a0 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
231b0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
231c0 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
231d0 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
231e0 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
231f0 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
23200 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
23210 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
23220 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
23230 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
23240 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
23250 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
23260 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
23270 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
23280 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
23290 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
232a0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
232b0 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
232c0 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
232d0 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
232e0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
232f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
23300 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
23310 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
23320 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b  e OP_IfNoHope: {
23330 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
23340 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
23350 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
23360 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23370 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23380 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23390 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
233a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
233b0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b  ;.  if( pC->seek
233c0 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  Hit ) break;.  /
233d0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
233e0 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  nto OP_NotFound 
233f0 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  */.}.case OP_NoC
23400 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
23410 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
23420 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
23430 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
23440 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
23450 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
23460 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
23470 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
23480 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70  ;.  int takeJump
23490 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
234a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
234b0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
234c0 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65  kedRecord *pFree
234d0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
234e0 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
234f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
23500 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
23510 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
23520 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
23530 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
23540 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
23550 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
23560 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23570 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23580 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
23590 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
235a0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
235b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
235c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
235d0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
235e0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
235f0 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
23600 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49  ode;.#endif.  pI
23610 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
23620 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
23630 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
23640 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23650 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
23660 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
23670 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23680 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  le==0 );.  if( p
23690 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
236a0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
236b0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
236c0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
236d0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
236e0 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23  r.aMem = pIn3;.#
236f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23700 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  UG.    for(ii=0;
23710 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
23720 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
23730 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
23740 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
23750 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61      assert( (r.a
23760 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
23770 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20  MEM_Zero)==0 || 
23780 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20  r.aMem[ii].n==0 
23790 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  );.      if( ii 
237a0 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
237b0 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
237c0 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d  aMem[ii]);.    }
237d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78  .#endif.    pIdx
237e0 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46  Key = &r;.    pF
237f0 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ree = 0;.  }else
23800 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
23810 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
23820 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d  Blob );.    rc =
23830 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
23840 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
23850 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
23860 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
23870 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29   );.    if( rc )
23880 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
23890 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65    pFree = pIdxKe
238a0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
238b0 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
238c0 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29  rd(pC->pKeyInfo)
238d0 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
238e0 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
238f0 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  em;.    sqlite3V
23900 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
23910 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
23920 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
23930 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20  pIdxKey);.  }.  
23940 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74  pIdxKey->default
23950 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a  _rc = 0;.  takeJ
23960 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  ump = 0;.  if( p
23970 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
23980 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20  oConflict ){.   
23990 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e   /* For the OP_N
239a0 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65  oConflict opcode
239b0 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  , take the jump 
239c0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20  if any of the.  
239d0 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64    ** input field
239e0 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63  s are NULL, sinc
239f0 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61  e any key with a
23a00 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20   NULL will not. 
23a10 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a     ** conflict *
23a20 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  /.    for(ii=0; 
23a30 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65  ii<pIdxKey->nFie
23a40 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
23a50 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d   if( pIdxKey->aM
23a60 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
23a70 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
23a80 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b     takeJump = 1;
23a90 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
23aa0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
23ab0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
23ac0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
23ad0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
23ae0 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
23af0 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
23b00 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44  pFree ) sqlite3D
23b10 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65  bFreeNN(db, pFre
23b20 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
23b30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67  LITE_OK ){.    g
23b40 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23b50 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43  _error;.  }.  pC
23b60 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
23b70 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69  es;.  alreadyExi
23b80 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
23b90 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23ba0 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  1-alreadyExists;
23bb0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
23bc0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
23bd0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23be0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
23bf0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23c00 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56  P_Found ){.    V
23c10 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
23c20 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c  lreadyExists!=0,
23c30 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65  2);.    if( alre
23c40 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
23c50 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
23c60 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
23c70 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75  anchTaken(takeJu
23c80 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74  mp||alreadyExist
23c90 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s==0,2);.    if(
23ca0 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c   takeJump || !al
23cb0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
23cc0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
23cd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
23ce0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f  * Opcode: SeekRo
23cf0 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
23d00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
23d10 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
23d20 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
23d30 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
23d40 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
23d50 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
23d60 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
23d70 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20   If register P3 
23d80 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
23d90 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69   an integer or i
23da0 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f P1 does not.**
23db0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
23dc0 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
23dd0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
23de0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a  ately to P2.  .*
23df0 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30  * Or, if P2 is 0
23e00 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  , raise an SQLIT
23e10 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e  E_CORRUPT error.
23e20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
23e30 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ain.** a record 
23e40 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
23e50 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65  en .** leave the
23e60 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
23e70 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20   at that record 
23e80 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
23e90 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
23ea0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
23eb0 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69  ** The OP_NotExi
23ec0 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  sts opcode perfo
23ed0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
23ee0 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68  ration, but with
23ef0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a   OP_NotExists.**
23f00 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
23f10 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74   must be guarant
23f20 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  eed to contain a
23f30 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
23f40 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f    With this.** o
23f50 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20  pcode, register 
23f60 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e  P3 might not con
23f70 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
23f80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
23f90 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
23fa0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
23fb0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
23fc0 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
23fd0 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
23fe0 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
23ff0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
24000 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
24010 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
24020 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
24030 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
24040 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
24050 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
24060 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
24070 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
24080 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
24090 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
240a0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
240b0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
240c0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
240d0 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
240e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
240f0 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
24100 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
24110 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
24120 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
24130 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
24140 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
24150 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
24160 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
24170 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
24180 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
24190 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
241a0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
241b0 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
241c0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
241d0 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66  y to P2.  Or, if
241e0 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20   P2 is 0, raise 
241f0 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52  an.** SQLITE_COR
24200 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
24210 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
24220 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
24230 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c  id P3 then .** l
24240 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
24250 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
24260 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
24270 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
24280 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
24290 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
242a0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f  P_SeekRowid opco
242b0 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
242c0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62  same operation b
242d0 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74  ut also allows t
242e0 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65  he.** P3 registe
242f0 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e  r to contain a n
24300 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65  on-integer value
24310 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
24320 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61  the jump is.** a
24330 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68  lways taken.  Th
24340 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72  is opcode requir
24350 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79  es that P3 alway
24360 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  s contain an int
24370 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  eger..**.** The 
24380 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f  OP_NotFound opco
24390 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
243a0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  same operation o
243b0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a  n index btrees.*
243c0 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72  * (with arbitrar
243d0 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65  y multi-value ke
243e0 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ys)..**.** This 
243f0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
24400 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
24410 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
24420 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a  not be advanced.
24430 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ** in either dir
24440 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
24450 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
24460 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64  t and Prev opcod
24470 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77  es will.** not w
24480 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ork following th
24490 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
244a0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
244b0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  , NotFound, NoCo
244c0 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69  nflict, SeekRowi
244d0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  d.*/.case OP_See
244e0 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  kRowid: {       
244f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
24500 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24510 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
24520 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
24530 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
24540 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
24550 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
24560 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
24570 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  Int)==0 ){.    /
24580 2a 20 4d 61 6b 65 20 73 75 72 65 20 70 49 6e 33  * Make sure pIn3
24590 2d 3e 75 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61  ->u.i contains a
245a0 20 76 61 6c 69 64 20 69 6e 74 65 67 65 72 20 72   valid integer r
245b0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
245c0 0a 20 20 20 20 2a 2a 20 74 68 65 20 6b 65 79 20  .    ** the key 
245d0 76 61 6c 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f  value, but do no
245e0 74 20 63 68 61 6e 67 65 20 74 68 65 20 64 61 74  t change the dat
245f0 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67  atype of the reg
24600 69 73 74 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a  ister, as.    **
24610 20 6f 74 68 65 72 20 70 61 72 74 73 20 6f 66 20   other parts of 
24620 74 68 65 20 70 65 72 70 61 72 65 64 20 73 74 61  the perpared sta
24630 74 65 6d 65 6e 74 20 6d 69 67 68 74 20 62 65 20  tement might be 
24640 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
24650 0a 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20  .    ** current 
24660 64 61 74 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20  datatype. */.   
24670 20 75 31 36 20 6f 72 69 67 46 6c 61 67 73 20 3d   u16 origFlags =
24680 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
24690 20 20 69 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a    int isNotInt;.
246a0 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
246b0 79 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41  y(pIn3, SQLITE_A
246c0 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
246d0 64 69 6e 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74  ding);.    isNot
246e0 49 6e 74 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  Int = (pIn3->fla
246f0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
24700 3b 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67  ;.    pIn3->flag
24710 73 20 3d 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20  s = origFlags;. 
24720 20 20 20 69 66 28 20 69 73 4e 6f 74 49 6e 74 20     if( isNotInt 
24730 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
24740 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  2;.  }.  /* Fall
24750 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
24760 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61  _NotExists */.ca
24770 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
24780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
24790 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  p, in3 */.  pIn3
247a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
247b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
247c0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
247d0 49 6e 74 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Int)!=0 || pOp->
247e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52  opcode==OP_SeekR
247f0 6f 77 69 64 20 29 3b 0a 20 20 61 73 73 65 72 74  owid );.  assert
24800 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24810 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24820 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24830 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24840 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24850 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
24860 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
24870 6b 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77  kOp = OP_SeekRow
24880 69 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73  id;.#endif.  ass
24890 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
248a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
248b0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
248c0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
248d0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
248e0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
248f0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
24900 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
24910 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
24920 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
24930 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
24940 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
24950 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
24960 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24970 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70  || res==0 );.  p
24980 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
24990 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
249a0 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
249b0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
249c0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
249d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
249e0 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
249f0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
24a00 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
24a10 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43  (res!=0,2);.  pC
24a20 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
24a30 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30  es;.  if( res!=0
24a40 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
24a50 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
24a60 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
24a70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
24a80 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
24a90 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65  _BKPT;.    }else
24aa0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
24ab0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
24ac0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
24ad0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24ae0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
24af0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
24b00 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
24b10 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
24b20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
24b30 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
24b40 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
24b50 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
24b60 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
24b70 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
24b80 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
24b90 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
24ba0 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
24bb0 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
24bc0 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
24bd0 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
24be0 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
24bf0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
24c00 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
24c10 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
24c20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24c30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24c40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24c50 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
24c60 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
24c70 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
24c80 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
24c90 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
24ca0 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  TAB );.  pOut = 
24cb0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
24cc0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
24cd0 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
24ce0 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
24cf0 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
24d00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
24d10 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
24d20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
24d30 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
24d40 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
24d50 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
24d60 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
24d70 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
24d80 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
24d90 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
24da0 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
24db0 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
24dc0 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
24dd0 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
24de0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
24df0 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
24e00 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
24e10 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
24e20 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
24e30 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
24e40 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
24e50 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
24e60 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
24e70 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
24e80 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
24e90 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
24ea0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
24eb0 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
24ec0 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
24ed0 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
24ee0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
24ef0 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
24f00 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
24f10 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
24f20 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
24f30 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
24f40 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
24f50 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
24f60 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
24f70 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
24f80 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
24f90 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
24fa0 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
24fb0 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
24fc0 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
24fd0 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
24fe0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
24ff0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
25000 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
25010 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
25020 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
25030 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
25040 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
25050 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
25060 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
25070 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
25080 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
25090 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
250a0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
250b0 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
250c0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
250d0 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
250e0 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
250f0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
25100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
25110 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
25120 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
25130 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
25140 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
25150 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
25160 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
25170 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
25180 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d  es = 0;.  pOut =
25190 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
251a0 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
251b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
251c0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
251d0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
251e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
251f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25210 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
25220 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
25230 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
25240 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
25250 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
25260 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  0 );.  {.    /* 
25270 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
25280 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
25290 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
252a0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
252b0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
252c0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
252d0 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
252e0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
252f0 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
25300 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
25310 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
25320 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
25330 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
25340 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
25350 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
25360 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
25370 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
25380 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
25390 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
253a0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
253b0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
253c0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
253d0 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
253e0 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
253f0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
25400 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
25410 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
25420 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
25430 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
25440 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
25450 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
25460 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
25470 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
25480 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
25490 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
254a0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
254b0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
254c0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
254d0 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   times..    */. 
254e0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
254f0 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65  sTable );..#ifde
25500 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
25510 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
25520 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
25530 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
25540 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
25550 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
25560 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
25570 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
25580 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
25590 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
255a0 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
255b0 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
255c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
255d0 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
255e0 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
255f0 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
25600 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
25610 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
25620 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
25630 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
25640 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
25650 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
25660 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
25670 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
25680 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
25690 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
256a0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
256b0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
256c0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
256d0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
256e0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
256f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25700 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
25710 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
25720 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50   v = 1;   /* IMP
25730 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20  : R-61914-48074 
25740 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
25750 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
25760 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
25770 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63  orIsValid(pC->uc
25780 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  .pCursor) );.   
25790 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
257a0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
257b0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
257c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d  .        if( v>=
257d0 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
257e0 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
257f0 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
25800 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
25810 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f          v++;   /
25820 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33  * IMP: R-29538-3
25830 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20  4987 */.        
25840 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
25850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25860 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
25870 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NT.    if( pOp->
25880 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  p3 ){.      /* A
25890 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
258a0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
258b0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  cell. */.      a
258c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
258d0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
258e0 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  >pFrame ){.     
258f0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
25900 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
25910 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
25920 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
25930 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  );.        /* As
25940 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
25950 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
25960 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
25970 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
25980 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b  =pFrame->nMem );
25990 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
259a0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
259b0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65  p->p3];.      }e
259c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
259d0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
259e0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
259f0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
25a00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25a10 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
25a20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
25a30 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
25a40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
25a50 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
25a60 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b  Change(p, pMem);
25a70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
25a80 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25a90 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
25aa0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
25ab0 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
25ac0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
25ad0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
25ae0 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73  pMem);.      ass
25af0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
25b00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
25b10 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
25b20 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
25b30 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65  */.      if( pMe
25b40 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
25b50 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
25b60 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
25b70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
25b80 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
25b90 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a  -17817-00630 */.
25ba0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
25bb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25bc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
25bd0 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
25be0 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
25bf0 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
25c00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65       }.      pMe
25c10 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
25c20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
25c30 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
25c40 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
25c50 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
25c60 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
25c70 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
25c80 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
25c90 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
25ca0 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
25cb0 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
25cc0 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
25cd0 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
25ce0 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
25cf0 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
25d00 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
25d10 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
25d20 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
25d30 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
25d40 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
25d50 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
25d60 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
25d70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
25d80 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
25d90 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
25da0 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
25dd0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
25de0 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  le. */.      cnt
25df0 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
25e00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
25e10 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
25e20 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
25e30 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
25e40 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a  ID>>1); v++;  /*
25e50 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69   Ensure that v i
25e60 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
25e70 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68  ero */.      }wh
25e80 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c  ile(  ((rc = sql
25e90 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
25ea0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
25eb0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
25ec0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
25f00 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
25f10 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
25f20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
25f30 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20   (++cnt<100));. 
25f40 20 20 20 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 20 20 20 20 69 66 28  error;.      if(
25f70 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
25f80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
25f90 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
25fa0 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a  -38219-53002 */.
25fb0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
25fc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25fd0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
25fe0 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f  ssert( v>0 );  /
25ff0 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33  * EV: R-40812-03
26000 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  570 */.    }.   
26010 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26020 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
26030 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26040 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
26050 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
26060 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26070 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50  Opcode: Insert P
26080 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
26090 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
260a0 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50  y=r[P3] data=r[P
260b0 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  2].**.** Write a
260c0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
260d0 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
260e0 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
260f0 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
26100 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
26110 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
26120 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
26130 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
26140 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
26150 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
26160 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
26170 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
26180 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
26190 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
261a0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
261b0 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
261c0 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
261d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
261e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
261f0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
26200 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
26210 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
26220 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
26230 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
26240 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
26250 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
26260 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
26270 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
26280 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
26290 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
262a0 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
262b0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
262c0 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
262d0 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
262e0 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
262f0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
26300 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
26310 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d  5 is set, the im
26320 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
26330 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72  ht.** run faster
26340 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20   by avoiding an 
26350 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b  unnecessary seek
26360 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20   on cursor P1.  
26370 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20  However,.** the 
26380 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
26390 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f  SULT flag must o
263a0 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68  nly be set if th
263b0 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f  ere have been no
263c0 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20   prior.** seeks 
263d0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72  on the cursor or
263e0 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   if the most rec
263f0 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20  ent seek used a 
26400 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e  key equal to P3.
26410 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
26420 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
26430 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
26440 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
26450 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
26460 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
26470 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
26480 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
26490 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
264a0 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
264b0 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
264c0 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
264d0 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
264e0 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
264f0 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
26500 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
26510 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
26520 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c  Table structure,
26530 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e   or may be NULL.
26540 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f   If it is .** no
26550 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
26560 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71   update-hook (sq
26570 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
26580 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
26590 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  d .** following 
265a0 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
265b0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
265c0 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
265d0 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
265e0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
265f0 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
26600 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
26610 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
26620 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
26630 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
26640 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
26650 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
26660 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
26670 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
26680 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
26690 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
266a0 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
266b0 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
266c0 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
266d0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
266e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
266f0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
26700 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
26710 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
26720 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
26730 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
26740 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
26750 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
26760 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26770 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
26780 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32  key=P3 data=r[P2
26790 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
267a0 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
267b0 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
267c0 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
267d0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
267e0 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
267f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
26800 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
26810 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
26820 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
26830 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
26840 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
26850 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
26860 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
26870 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
26880 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
26890 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
268a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
268b0 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
268c0 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
268d0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
268e0 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
268f0 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
26900 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
26910 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
26920 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
26930 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
26940 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
26950 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
26960 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
26970 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
26980 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
26990 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
269a0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c  e hook */.  Tabl
269b0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
269c0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
269d0 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74   - used by updat
269e0 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65  e and pre-update
269f0 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65   hooks */.  Btre
26a00 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a  ePayload x;   /*
26a10 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69   Payload to be i
26a20 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44  nserted */..  pD
26a30 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
26a40 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
26a50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26a60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
26a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
26a80 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
26a90 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26aa0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26ab0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26ac0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26ad0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
26ae0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
26af0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
26b00 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
26b10 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
26b20 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70  LAG_ISNOOP) || p
26b30 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
26b40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
26b50 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c  ype==P4_TABLE ||
26b60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34   pOp->p4type>=P4
26b70 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47  _STATIC );.  REG
26b80 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
26b90 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73  >p2, pData);.  s
26ba0 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
26bb0 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
26bc0 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
26bd0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
26be0 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
26bf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
26c00 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
26c10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26c20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26c30 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
26c40 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
26c50 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
26c60 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  pKey);.    x.nKe
26c70 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
26c80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
26c90 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
26ca0 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
26cb0 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f  .    x.nKey = pO
26cc0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
26cd0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
26ce0 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
26cf0 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
26d00 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
26d10 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
26d20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
26d30 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b  ->iDb].zDbSName;
26d40 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
26d50 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73  >p4.pTab;.    as
26d60 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
26d70 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20   OPFLAG_ISNOOP) 
26d80 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  || HasRowid(pTab
26d90 29 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ) );.  }else{.  
26da0 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20    pTab = 0;.    
26db0 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  zDb = 0;  /* Not
26dc0 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
26dd0 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
26de0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69  ning. */.  }..#i
26df0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
26e00 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
26e10 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  K.  /* Invoke th
26e20 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
26e30 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69  k, if any */.  i
26e40 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69  f( pTab ){.    i
26e50 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74  f( db->xPreUpdat
26e60 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70  eCallback && !(p
26e70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26e80 49 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20  ISUPDATE) ){.   
26e90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
26ea0 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70  eUpdateHook(p, p
26eb0 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  C, SQLITE_INSERT
26ec0 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e  , zDb, pTab, x.n
26ed0 4b 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Key,pOp->p2);.  
26ee0 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
26ef0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d  xUpdateCallback=
26f00 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c  =0 || pTab->aCol
26f10 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
26f20 50 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64  Prevent post-upd
26f30 61 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75  ate hook from ru
26f40 6e 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77  nning in cases w
26f50 68 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  hen it should no
26f60 74 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20  t */.      pTab 
26f70 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
26f80 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
26f90 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62  PFLAG_ISNOOP ) b
26fa0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
26fb0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26fc0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
26fd0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
26fe0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
26ff0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
27000 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
27010 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74  x.nKey;.  assert
27020 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
27030 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
27040 74 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61  tr) );.  x.pData
27050 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78   = pData->z;.  x
27060 2e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .nData = pData->
27070 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20  n;.  seekResult 
27080 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
27090 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
270a0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
270b0 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
270c0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
270d0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
270e0 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d  x.nZero = pData-
270f0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
27100 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d  e{.    x.nZero =
27110 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79   0;.  }.  x.pKey
27120 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
27130 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
27140 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
27150 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e  &x,.      (pOp->
27160 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50  p5 & (OPFLAG_APP
27170 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50  END|OPFLAG_SAVEP
27180 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52  OSITION)), seekR
27190 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d  esult.  );.  pC-
271a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
271b0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
271c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
271d0 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
271e0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
271f0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
27200 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  */.  if( rc ) go
27210 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27220 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61  error;.  if( pTa
27230 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  b ){.    assert(
27240 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
27250 62 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61  back!=0 );.    a
27260 73 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f  ssert( pTab->aCo
27270 6c 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e  l!=0 );.    db->
27280 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
27290 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a  db->pUpdateArg,.
272a0 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
272b0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
272c0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
272d0 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
272e0 49 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20  INSERT,.        
272f0 20 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e     zDb, pTab->zN
27300 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20  ame, x.nKey);.  
27310 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27320 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
27330 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
27340 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
27350 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
27360 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
27370 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
27380 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ing..**.** If th
27390 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
273a0 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65  ITION bit of the
273b0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73   P5 parameter is
273c0 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68   set, then.** th
273d0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
273e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
273f0 74 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  t  either the ne
27400 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
27410 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
27420 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
27430 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
27440 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
27450 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
27460 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
27470 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
27480 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65  a no-op. As a re
27490 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61  sult, in this ca
274a0 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74  se.** it is ok t
274b0 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72  o delete a recor
274c0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  d from within a 
274d0 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a  Next loop. If .*
274e0 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  * OPFLAG_SAVEPOS
274f0 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20  ITION bit of P5 
27500 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74  is clear, then t
27510 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
27520 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20  e.** left in an 
27530 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
27540 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
27550 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62  FLAG_AUXDELETE b
27560 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c  it is set on P5,
27570 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
27580 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c  that this.** del
27590 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72  ete one of sever
275a0 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  al associated wi
275b0 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61  th deleting a ta
275c0 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20  ble row and all 
275d0 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  its.** associate
275e0 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e  d index entries.
275f0 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66    Exactly one of
27600 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69   those deletes i
27610 73 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a  s the "primary".
27620 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20  ** delete.  The 
27630 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f  others are all o
27640 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  n OPFLAG_FORDELE
27650 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c  TE cursors or el
27660 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64  se are.** marked
27670 20 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c   with the AUXDEL
27680 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ETE flag..**.** 
27690 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
276a0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
276b0 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29   (NB: P2 not P5)
276c0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
276d0 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20  e row.** change 
276e0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
276f0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
27700 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
27710 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
27720 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
27730 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
27740 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
27750 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
27760 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
27770 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74  LL then it point
27780 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a  s to a Table obj
27790 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ect. In this cas
277a0 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65  e either .** the
277b0 20 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75   update or pre-u
277c0 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62  pdate hook, or b
277d0 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f  oth, may be invo
277e0 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73  ked. The P1 curs
277f0 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  or must.** have 
27800 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20  been positioned 
27810 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
27820 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
27830 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ing this opcode 
27840 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65  in .** this case
27850 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  . Specifically, 
27860 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67  if one is config
27870 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70  ured, the pre-up
27880 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a  date hook is .**
27890 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69   invoked if P4 i
278a0 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20  s not NULL. The 
278b0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69  update-hook is i
278c0 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73  nvoked if one is
278d0 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a   configured, .**
278e0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
278f0 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f   and the OPFLAG_
27900 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20  NCHANGE flag is 
27910 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a  set in P2..**.**
27920 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
27930 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
27940 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20  set in P2, then 
27950 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
27960 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68  address.** of th
27970 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
27980 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
27990 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72  value that the r
279a0 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20  owid of the row 
279b0 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74  will.** be set t
279c0 6f 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e  o by the update.
279d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
279e0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
279f0 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20  or *pC;.  const 
27a00 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62  char *zDb;.  Tab
27a10 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20  le *pTab;.  int 
27a20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c  opflags;..  opfl
27a30 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ags = pOp->p2;. 
27a40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27a50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27a60 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27a70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27a80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27a90 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
27aa0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
27ab0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
27ac0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27ad0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
27ae0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27af0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27b00 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  0 );.  sqlite3Vd
27b10 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
27b20 65 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64  er(p, pC);..#ifd
27b30 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27b40 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
27b50 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
27b60 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
27b70 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35  pTab) && pOp->p5
27b80 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ==0 ){.    /* If
27b90 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   p5 is zero, the
27ba0 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
27bb0 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
27bc0 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
27bd0 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65   to.    ** OP_De
27be0 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61  lete will have a
27bf0 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
27c00 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
27c10 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
27c20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f  of.    ** the ro
27c30 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20  w that is being 
27c40 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69  deleted */.    i
27c50 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65  64 iKey = sqlite
27c60 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
27c70 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27c80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
27c90 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d  ->movetoTarget==
27ca0 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  iKey );.  }.#end
27cb0 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  if..  /* If the 
27cc0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70  update-hook or p
27cd0 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  re-update-hook w
27ce0 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
27cf0 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20  set zDb to.  ** 
27d00 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
27d10 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f  db to pass as to
27d20 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f   it. Also set lo
27d30 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f  cal pTab to a co
27d40 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54  py.  ** of p4.pT
27d50 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  ab. Finally, if 
27d60 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69  p5 is true, indi
27d70 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73  cating that this
27d80 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a   cursor was.  **
27d90 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68   last moved with
27da0 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
27db0 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72  rev, not Seek or
27dc0 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a   NotFound, set .
27dd0 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e    ** VdbeCursor.
27de0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20  movetoTarget to 
27df0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69  the current rowi
27e00 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  d.  */.  if( pOp
27e10 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
27e20 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
27e30 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
27e40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
27e50 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
27e60 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21  t( pOp->p4.pTab!
27e70 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
27e80 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
27e90 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
27ea0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
27eb0 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  ab;.    if( (pOp
27ec0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41  ->p5 & OPFLAG_SA
27ed0 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26  VEPOSITION)!=0 &
27ee0 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
27ef0 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  .      pC->movet
27f00 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
27f10 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
27f20 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27f30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
27f40 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20  .    zDb = 0;   
27f50 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
27f60 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
27f70 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
27f80 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a     pTab = 0;  /*
27f90 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
27fa0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
27fb0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
27fc0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
27fd0 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
27fe0 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
27ff0 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
28000 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
28010 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
28020 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
28030 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54  ck && pOp->p4.pT
28040 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ab ){.    assert
28050 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50  ( !(opflags & OP
28060 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a  FLAG_ISUPDATE) .
28070 20 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52           || HasR
28080 6f 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20  owid(pTab)==0 . 
28090 20 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d          || (aMem
280a0 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20  [pOp->p3].flags 
280b0 26 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20  & MEM_Int) .    
280c0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
280d0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
280e0 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28  p, pC,.        (
280f0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
28100 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
28110 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
28120 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20  ITE_DELETE, .   
28130 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20       zDb, pTab, 
28140 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
28150 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
28160 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69  3.    );.  }.  i
28170 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
28180 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
28190 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f  ak;.#endif. .  /
281a0 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61  * Only flags tha
281b0 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65  t can be set are
281c0 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e   SAVEPOISTION an
281d0 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a  d AUXDELETE */ .
281e0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
281f0 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41  p5 & ~(OPFLAG_SA
28200 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41  VEPOSITION|OPFLA
28210 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30  G_AUXDELETE))==0
28220 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
28230 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
28240 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53  N==BTREE_SAVEPOS
28250 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72  ITION );.  asser
28260 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  t( OPFLAG_AUXDEL
28270 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45  ETE==BTREE_AUXDE
28280 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20  LETE );..#ifdef 
28290 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
282a0 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20  f( p->pFrame==0 
282b0 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  ){.    if( pC->i
282c0 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20  sEphemeral==0.  
282d0 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70        && (pOp->p
282e0 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  5 & OPFLAG_AUXDE
282f0 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20  LETE)==0.       
28300 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20   && (pC->wrFlag 
28310 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
28320 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  TE)==0.      ){.
28330 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
28340 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  te++;.    }.    
28350 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
28360 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
28370 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
28380 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  te--;.    }.  }.
28390 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73  #endif..  rc = s
283a0 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
283b0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
283c0 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43  , pOp->p5);.  pC
283d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
283e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
283f0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
28400 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
28410 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28420 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76  error;..  /* Inv
28430 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
28440 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
28450 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67   */.  if( opflag
28460 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  s & OPFLAG_NCHAN
28470 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  GE ){.    p->nCh
28480 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20  ange++;.    if( 
28490 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
284a0 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28  ack && HasRowid(
284b0 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64  pTab) ){.      d
284c0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
284d0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
284e0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
284f0 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
28500 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43  me,.          pC
28510 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
28520 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
28530 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
28540 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
28550 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
28560 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
28570 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
28580 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
28590 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
285a0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
285b0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
285c0 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
285d0 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
285e0 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
285f0 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
28600 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
28610 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
28620 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
28630 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
28640 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
28650 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
28660 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
28670 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
28680 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
28690 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
286a0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
286b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
286c0 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
286d0 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
286e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
286f0 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
28700 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
28710 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
28720 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
28730 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
28740 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
28750 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
28760 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
28770 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
28780 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
28790 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
287a0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
287b0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
287c0 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72  o.  Only the fir
287d0 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20  st P4 fields.** 
287e0 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65  of r[P3] and the
287f0 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
28800 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a  re compared..**.
28810 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20  ** If either P3 
28820 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f  or the sorter co
28830 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e  ntains a NULL in
28840 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69   one of their si
28850 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65  gnificant.** fie
28860 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e  lds (not countin
28870 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20  g the P4 fields 
28880 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68  at the end which
28890 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68   are ignored) th
288a0 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  en.** the compar
288b0 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20  ison is assumed 
288c0 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a  to be equal..**.
288d0 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** Fall through 
288e0 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  to next instruct
288f0 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72  ion if the two r
28900 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65  ecords compare e
28910 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20  qual to.** each 
28920 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20  other.  Jump to 
28930 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64  P2 if they are d
28940 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73  ifferent..*/.cas
28950 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61  e OP_SorterCompa
28960 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  re: {.  VdbeCurs
28970 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
28980 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c  s;.  int nKeyCol
28990 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
289a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
289b0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
289c0 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  pC) );.  assert(
289d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
289e0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33  _INT32 );.  pIn3
289f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
28a00 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70  ];.  nKeyCol = p
28a10 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20  Op->p4.i;.  res 
28a20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
28a30 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
28a40 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e  pare(pC, pIn3, n
28a50 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20  KeyCol, &res);. 
28a60 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28a70 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
28a80 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28a90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28aa0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
28ab0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
28ac0 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
28ad0 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
28ae0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
28af0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
28b00 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
28b10 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
28b20 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
28b30 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
28b40 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
28b50 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68  ** Then clear th
28b60 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20  e column header 
28b70 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20  cache on cursor 
28b80 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P3..**.** This o
28b90 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  pcode is normall
28ba0 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20  y use to move a 
28bb0 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68  record out of th
28bc0 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74  e sorter and int
28bd0 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20  o.** a register 
28be0 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72  that is the sour
28bf0 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d  ce for a pseudo-
28c00 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65  table cursor cre
28c10 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70  ated using.** Op
28c20 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20  enPseudo.  That 
28c30 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
28c40 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74  sor is the one t
28c50 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  hat is identifie
28c60 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d by.** paramete
28c70 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20  r P3.  Clearing 
28c80 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61  the P3 column ca
28c90 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  che as part of t
28ca0 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73  his opcode saves
28cb0 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69  .** us from havi
28cc0 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65  ng to issue a se
28cd0 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69  parate NullRow i
28ce0 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c  nstruction to cl
28cf0 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a  ear that cache..
28d00 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
28d10 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
28d20 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
28d30 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
28d40 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
28d50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28d60 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
28d70 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
28d80 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
28d90 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
28da0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
28db0 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
28dc0 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
28dd0 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65  _Blob) );.  asse
28de0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28df0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28e00 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63  rsor );.  if( rc
28e10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28e20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d  e_to_error;.  p-
28e30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d  >apCsr[pOp->p3]-
28e40 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28e50 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
28e60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28e70 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
28e80 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
28e90 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
28ea0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
28eb0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
28ec0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f   complete row co
28ed0 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f  ntent for the ro
28ee0 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63  w at .** which c
28ef0 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
28f00 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
28f10 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
28f20 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
28f30 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
28f40 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
28f50 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
28f60 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
28f70 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
28f80 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
28f90 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
28fa0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e   cursor P1 is an
28fb0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65   index, then the
28fc0 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20   content is the 
28fd0 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a  key of the row..
28fe0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20  ** If cursor P2 
28ff0 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e  is a table, then
29000 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74   the content ext
29010 72 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61  racted is the da
29020 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ta..**.** If the
29030 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
29040 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
29050 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
29060 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
29070 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
29080 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
29090 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  le..**.** If P3!
290a0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
290b0 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ode is allowed t
290c0 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65  o make an epheme
290d0 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69  ral pointer.** i
290e0 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
290f0 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61   page.  That mea
29100 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74  ns that the cont
29110 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ent of the outpu
29120 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69  t.** register wi
29130 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  ll be invalidate
29140 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
29150 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20   cursor moves - 
29160 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76  including.** mov
29170 65 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68  es caused by oth
29180 65 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20  er cursors that 
29190 22 73 61 76 65 22 20 74 68 65 20 63 75 72 72 65  "save" the curre
291a0 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f  nt cursors.** po
291b0 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20  sition in order 
291c0 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 77 72  that they can wr
291d0 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ite to the same 
291e0 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30  table.  If P3==0
291f0 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20  .** then a copy 
29200 6f 66 20 74 68 65 20 64 61 74 61 20 69 73 20 6d  of the data is m
29210 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e  ade into memory.
29220 20 20 50 33 21 3d 30 20 69 73 20 66 61 73 74 65    P3!=0 is faste
29230 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20  r, but.** P3==0 
29240 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  is safer..**.** 
29250 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68  If P3!=0 then th
29260 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
29270 20 50 32 20 72 65 67 69 73 74 65 72 20 69 73 20   P2 register is 
29280 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75  unsuitable for u
29290 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75  se.** in OP_Resu
292a0 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65  lt and any OP_Re
292b0 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69  sult will invali
292c0 64 61 74 65 20 74 68 65 20 50 32 20 72 65 67 69  date the P2 regi
292d0 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a  ster content..**
292e0 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72   The P2 register
292f0 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61   content is inva
29300 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64  lidated by opcod
29310 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74  es like OP_Funct
29320 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79  ion or.** by any
29330 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20   use of another 
29340 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
29350 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  to the same tabl
29360 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
29370 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
29380 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
29390 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
293a0 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
293b0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
293c0 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65  p, pOp);..  asse
293d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
293e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
293f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
29400 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29410 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29420 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
29430 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
29440 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
29450 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
29460 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
29470 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
29480 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29490 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
294a0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
294b0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
294c0 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
294d0 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
294e0 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
294f0 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
29500 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20  OP_SeekRowid or 
29510 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
29520 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
29530 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
29540 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67  ns.  ** that mig
29550 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  ht invalidate th
29560 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49  e cursor..  ** I
29570 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74  f this where not
29580 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66   the case, on of
29590 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
295a0 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f  ssert()s.  ** wo
295b0 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c  uld fail.  Shoul
295c0 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e  d this ever chan
295d0 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63  ge (because of c
295e0 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f  hanges in the co
295f0 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f  de.  ** generato
29600 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20  r) then the fix 
29610 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65  would be to inse
29620 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  rt a call to.  *
29630 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  * sqlite3VdbeCur
29640 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a  sorMoveto()..  *
29650 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
29660 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
29670 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
29680 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
29690 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
296a0 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74  );.#if 0  /* Not
296b0 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f   required due to
296c0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f   the previous to
296d0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
296e0 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ents */.  rc = s
296f0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
29700 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
29710 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
29720 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29730 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
29740 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  f..  n = sqlite3
29750 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
29760 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e  (pCrsr);.  if( n
29770 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
29780 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
29790 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
297a0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
297b0 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20   testcase( n==0 
297c0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
297d0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
297e0 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  e(pCrsr, 0, n, p
297f0 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Out);.  if( rc )
29800 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29810 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
29820 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68  !pOp->p3 ) Deeph
29830 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
29840 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
29850 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
29860 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
29870 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
29880 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29890 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
298a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
298b0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
298c0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
298d0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
298e0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
298f0 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
29900 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
29910 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
29920 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
29930 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
29940 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
29950 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
29960 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
29970 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
29980 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
29990 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
299a0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
299b0 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
299c0 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
299d0 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
299e0 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
299f0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
29a00 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
29a10 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
29a20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29a30 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
29a40 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
29a50 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
29a60 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
29a70 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
29a80 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
29a90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29aa0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29ab0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29ac0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29ad0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29ae0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
29af0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
29b00 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
29b10 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
29b20 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
29b30 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
29b40 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
29b50 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
29b60 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
29b70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
29b80 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
29b90 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
29ba0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29bb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
29bc0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
29bd0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29be0 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73  E_VTAB ){.    as
29bf0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43  sert( pC->uc.pVC
29c00 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74  ur!=0 );.    pVt
29c10 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75  ab = pC->uc.pVCu
29c20 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
29c30 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
29c40 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
29c50 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
29c60 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
29c70 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
29c80 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76  pC->uc.pVCur, &v
29c90 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
29ca0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
29cb0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
29cc0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29cd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29ce0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
29cf0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29d00 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
29d10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
29d20 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
29d30 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
29d40 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
29d50 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
29d60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
29d70 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
29d80 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
29d90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29da0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
29db0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
29dc0 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
29dd0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
29de0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
29df0 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
29e00 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
29e10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
29e20 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
29e30 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
29e40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
29e50 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
29e60 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
29e70 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
29e80 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
29e90 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
29ea0 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
29eb0 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
29ec0 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
29ed0 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
29ee0 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
29ef0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
29f00 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
29f10 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
29f20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29f30 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29f40 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
29f50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
29f60 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
29f70 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
29f80 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 1;.  pC->cac
29f90 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
29fa0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43  _STALE;.  if( pC
29fb0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
29fc0 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
29fd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
29fe0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
29ff0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
2a000 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  earCursor(pC->uc
2a010 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23  .pCursor);.  }.#
2a020 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2a030 55 47 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65  UG.  if( pC->see
2a040 6b 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65  kOp==0 ) pC->see
2a050 6b 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77  kOp = OP_NullRow
2a060 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
2a070 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a080 53 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a  SeekEnd P1 * * *
2a090 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f   *.**.** Positio
2a0a0 6e 20 63 75 72 73 6f 72 20 50 31 20 61 74 20 74  n cursor P1 at t
2a0b0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
2a0c0 72 65 65 20 66 6f 72 20 74 68 65 20 70 75 72 70  ree for the purp
2a0d0 6f 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64  ose of.** append
2a0e0 69 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20  ing a new entry 
2a0f0 6f 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a  onto the btree..
2a100 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75  **.** It is assu
2a110 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72  med that the cur
2a120 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  sor is used only
2a130 20 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61   for appending a
2a140 6e 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20  nd so.** if the 
2a150 63 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c  cursor is valid,
2a160 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
2a170 20 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62 65   must already be
2a180 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20   pointing.** at 
2a190 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62  the end of the b
2a1a0 74 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63  tree and so no c
2a1b0 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20  hanges are made 
2a1c0 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  to.** the cursor
2a1d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2a1e0 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
2a1f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
2a200 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
2a210 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
2a220 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
2a230 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
2a240 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
2a250 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
2a260 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2a270 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
2a280 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2a290 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
2a2a0 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
2a2b0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
2a2c0 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
2a2d0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
2a2e0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
2a2f0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
2a300 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2a310 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2a320 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
2a330 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
2a340 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
2a350 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
2a360 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
2a370 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
2a380 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
2a390 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2a3a0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
2a3b0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
2a3c0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
2a3d0 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
2a3e0 5f 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f  _SeekEnd:.case O
2a3f0 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
2a400 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2a410 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2a420 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
2a430 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
2a440 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a450 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a460 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a470 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a480 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a490 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a4a0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a4b0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a4c0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2a4d0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  c.pCursor;.  res
2a4e0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2a4f0 70 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64  pCrsr!=0 );.#ifd
2a500 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2a510 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
2a520 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
2a530 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  if.  if( pOp->op
2a540 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64  code==OP_SeekEnd
2a550 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2a560 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
2a570 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2a580 20 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73   = -1;.    if( s
2a590 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
2a5a0 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72  rIsValidNN(pCrsr
2a5b0 29 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b  ) ){.      break
2a5c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  ;.    }.  }.  rc
2a5d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
2a5e0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
2a5f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2a600 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
2a610 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
2a620 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
2a630 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2a640 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29  TALE;.  if( rc )
2a650 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2a660 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2a670 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
2a680 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2a690 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
2a6a0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
2a6b0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2a6c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2a6d0 63 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20  code: IfSmaller 
2a6e0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2a6f0 2a 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65 20  ** Estimate the 
2a700 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2a710 6e 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20  n the table P1. 
2a720 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
2a730 68 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20  hat.** estimate 
2a740 69 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70  is less than app
2a750 72 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30  roximately 2**(0
2a760 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20  .1*P3)..*/.case 
2a770 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20  OP_IfSmaller: { 
2a780 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a790 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2a7a0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2a7b0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2a7c0 3b 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61  ;.  i64 sz;..  a
2a7d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a7e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a7f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a800 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a810 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a820 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
2a830 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2a840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
2a850 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  r );.  rc = sqli
2a860 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
2a870 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  rsr, &res);.  if
2a880 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a890 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a8a0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
2a8b0 20 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33      sz = sqlite3
2a8c0 42 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74  BtreeRowCountEst
2a8d0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28  (pCrsr);.    if(
2a8e0 20 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26   ALWAYS(sz>=0) &
2a8f0 26 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  & sqlite3LogEst(
2a900 28 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33  (u64)sz)<pOp->p3
2a910 20 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a   ) res = 1;.  }.
2a920 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2a930 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
2a940 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
2a950 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
2a960 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
2a970 3a 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20  : SorterSort P1 
2a980 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
2a990 66 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73  fter all records
2a9a0 20 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72   have been inser
2a9b0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72  ted into the Sor
2a9c0 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64  ter object.** id
2a9d0 65 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c 20  entified by P1, 
2a9e0 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
2a9f0 64 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64  de to actually d
2aa00 6f 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a  o the sorting..*
2aa10 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
2aa20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
2aa30 6f 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65  ords to be sorte
2aa40 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  d..**.** This op
2aa50 63 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73  code is an alias
2aa60 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64   for OP_Sort and
2aa70 20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20   OP_Rewind that 
2aa80 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53  is used.** for S
2aa90 6f 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a  orter objects..*
2aaa0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2aab0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2aac0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2aad0 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
2aae0 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
2aaf0 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
2ab00 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
2ab10 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
2ab20 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
2ab30 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
2ab40 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
2ab50 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
2ab60 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
2ab70 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
2ab80 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
2ab90 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
2aba0 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
2abb0 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
2abc0 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
2abd0 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
2abe0 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
2abf0 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
2ac00 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
2ac10 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
2ac20 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
2ac30 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
2ac40 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
2ac50 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
2ac60 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
2ac70 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
2ac80 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
2ac90 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
2aca0 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
2acb0 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
2acc0 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
2acd0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2ace0 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
2acf0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2ad00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2ad10 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
2ad20 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
2ad30 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
2ad40 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
2ad50 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
2ad60 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
2ad70 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
2ad80 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
2ad90 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
2ada0 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
2adb0 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
2adc0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
2add0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
2ade0 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
2adf0 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
2ae00 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
2ae10 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  o the first entr
2ae20 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
2ae30 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2ae40 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2ae50 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
2ae60 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  pty, jump immedi
2ae70 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
2ae80 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
2ae90 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
2aea0 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
2aeb0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
2aec0 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  g .** instructio
2aed0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
2aee0 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74  s non-zero and t
2aef0 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
2af00 65 6d 70 74 79 2c 20 74 68 65 6e 20 74 68 65 20  empty, then the 
2af10 22 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66  "skip-next".** f
2af20 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20 74 68  lag is set on th
2af30 65 20 63 75 72 73 6f 72 20 73 6f 20 74 68 61 74  e cursor so that
2af40 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78   the next OP_Nex
2af50 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a  t instruction .*
2af60 2a 20 65 78 65 63 75 74 65 64 20 6f 6e 20 69 74  * executed on it
2af70 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a   is a no-op..**.
2af80 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
2af90 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
2afa0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
2afb0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
2afc0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
2afd0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
2afe0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
2aff0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2b000 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
2b010 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
2b020 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
2b030 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
2b040 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
2b050 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2b060 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2b070 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2b080 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
2b090 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2b0a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2b0b0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2b0c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2b0d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2b0e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
2b0f0 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
2b100 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2b110 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
2b120 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
2b130 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
2b140 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
2b150 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
2b160 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
2b170 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b180 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
2b190 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
2b1a0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2b1b0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2b1c0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2b1d0 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
2b1e0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
2b1f0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
2b200 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2b210 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
2b220 73 72 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e 64  sr, &res);.#ifnd
2b230 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2b240 49 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20 69 66  INDOWFUNC.    if
2b250 28 20 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69  ( pOp->p5 ) sqli
2b260 74 65 33 42 74 72 65 65 53 6b 69 70 4e 65 78 74  te3BtreeSkipNext
2b270 28 70 43 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a  (pCrsr);.#endif.
2b280 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
2b290 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
2b2a0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2b2b0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2b2c0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
2b2d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2b2e0 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c  error;.  pC->nul
2b2f0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
2b300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b310 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
2b320 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42  ->nOp );.  VdbeB
2b330 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
2b340 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
2b350 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2b360 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2b370 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
2b380 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2b390 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
2b3a0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
2b3b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
2b3c0 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
2b3d0 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
2b3e0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
2b3f0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
2b400 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
2b410 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
2b420 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
2b430 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
2b440 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
2b450 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
2b460 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2b470 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2b480 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2b490 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
2b4a0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
2b4b0 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
2b4c0 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a  GT, SeekGE, or.*
2b4d0 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f  * OP_Rewind opco
2b4e0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
2b4f0 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
2b500 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c   Next is not all
2b510 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
2b520 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  w SeekLT, SeekLE
2b530 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a  , or OP_Last..**
2b540 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
2b550 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
2b560 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
2b570 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
2b580 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a   P1 must have.**
2b590 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69   been opened pri
2b5a0 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64  or to this opcod
2b5b0 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d  e or the program
2b5c0 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a   will segfault..
2b5d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
2b5e0 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
2b5f0 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
2b600 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
2b610 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
2b620 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
2b630 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
2b640 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
2b650 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
2b660 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
2b670 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
2b680 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
2b690 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
2b6a0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
2b6b0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
2b6c0 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
2b6d0 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
2b6e0 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
2b6f0 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
2b700 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
2b710 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  Next()..**.** If
2b720 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
2b730 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
2b740 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
2b750 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
2b760 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
2b770 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2b780 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
2b790 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
2b7a0 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70  o: Prev.*/./* Op
2b7b0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
2b7c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2b7d0 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
2b7e0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
2b7f0 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
2b800 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
2b810 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
2b820 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
2b830 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
2b840 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
2b850 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
2b860 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
2b870 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
2b880 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
2b890 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
2b8a0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
2b8b0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
2b8c0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
2b8d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
2b8e0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
2b8f0 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
2b900 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2b910 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
2b920 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
2b930 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
2b940 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
2b950 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
2b960 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
2b970 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
2b980 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
2b990 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
2b9a0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
2b9b0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
2b9c0 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
2b9d0 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
2b9e0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
2b9f0 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
2ba00 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
2ba10 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2ba20 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
2ba30 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
2ba40 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
2ba50 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
2ba60 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
2ba70 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
2ba80 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
2ba90 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
2baa0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
2bab0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
2bac0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
2bad0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
2bae0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
2baf0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
2bb00 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
2bb10 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
2bb20 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
2bb30 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
2bb40 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
2bb50 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
2bb60 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
2bb70 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
2bb80 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
2bb90 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
2bba0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2bbb0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2bbc0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2bbd0 53 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50 32  SorterNext P1 P2
2bbe0 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68   * * P5.**.** Th
2bbf0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
2bc00 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78  just like OP_Nex
2bc10 74 20 65 78 63 65 70 74 20 74 68 61 74 20 50 31  t except that P1
2bc20 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f   must be a.** so
2bc30 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20  rter object for 
2bc40 77 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72  which the OP_Sor
2bc50 74 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68  terSort opcode h
2bc60 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b  as been.** invok
2bc70 65 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ed.  This opcode
2bc80 20 61 64 76 61 6e 63 65 73 20 74 68 65 20 63 75   advances the cu
2bc90 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74  rsor to the next
2bca0 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72   sorted.** recor
2bcb0 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50  d, or jumps to P
2bcc0 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  2 if there are n
2bcd0 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65  o more sorted re
2bce0 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cords..*/.case O
2bcf0 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20  P_SorterNext: { 
2bd00 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2bd10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
2bd20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2bd30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2bd40 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
2bd50 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2bd60 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
2bd70 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20  db, pC);.  goto 
2bd80 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
2bd90 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
2bda0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2bdb0 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20  e OP_Next:      
2bdc0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2bdd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2bde0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2bdf0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
2be00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41  ssert( pOp->p5<A
2be10 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
2be20 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
2be30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2be40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2be50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2be60 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2be70 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2be80 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2be90 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2bea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2beb0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
2bec0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
2bed0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
2bee0 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
2bef0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2bf00 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d  =OP_Prev || pOp-
2bf10 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
2bf20 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
2bf30 75 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  us );..  /* The 
2bf40 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
2bf50 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
2bf60 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52  eekGT, SeekGE, R
2bf70 65 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64  ewind, and Found
2bf80 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20  ..  ** The Prev 
2bf90 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
2bfa0 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54  sed after SeekLT
2bfb0 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61  , SeekLE, and La
2bfc0 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  st. */.  assert(
2bfd0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2bfe0 5f 4e 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20  _Next.       || 
2bff0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2c000 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
2c010 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
2c020 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2c030 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
2c040 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2c050 5f 46 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c  _Found .       |
2c060 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2c070 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73  _NullRow);.  ass
2c080 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c090 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20  !=OP_Prev.      
2c0a0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c0b0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d  OP_SeekLT || pC-
2c0c0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2c0d0 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  LE.       || pC-
2c0e0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74  >seekOp==OP_Last
2c0f0 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e   .       || pC->
2c100 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52  seekOp==OP_NullR
2c110 6f 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70  ow);..  rc = pOp
2c120 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43  ->p4.xAdvance(pC
2c130 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
2c140 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69  p->p3);.next_tai
2c150 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
2c160 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2c170 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  LE;.  VdbeBranch
2c180 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
2c190 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  _OK,2);.  if( rc
2c1a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2c1b0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
2c1c0 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   0;.    p->aCoun
2c1d0 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
2c1e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2c1f0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
2c200 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
2c210 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a  endif.    goto j
2c220 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
2c230 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2c240 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
2c250 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67  =SQLITE_DONE ) g
2c260 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c270 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53  _error;.  rc = S
2c280 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e  QLITE_OK;.  pC->
2c290 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67  nullRow = 1;.  g
2c2a0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
2c2b0 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
2c2c0 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
2c2d0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2c2e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2c2f0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2c300 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2c310 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2c320 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2c330 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2c340 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2c350 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2c360 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2c370 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
2c380 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
2c390 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
2c3a0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72  If P4 is not zer
2c3b0 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  o, then it is th
2c3c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
2c3d0 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b  es in the unpack
2c3e0 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67  ed.** key of reg
2c3f0 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63  (P2).  In that c
2c400 61 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69  ase, P3 is the i
2c410 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
2c420 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f  t register.** fo
2c430 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  r the unpacked k
2c440 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62  ey.  The availab
2c450 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70  ility of the unp
2c460 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f  acked key can so
2c470 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e  metimes.** be an
2c480 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a   optimization..*
2c490 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
2c4a0 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  he OPFLAG_APPEND
2c4b0 20 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69   bit set, that i
2c4c0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
2c4d0 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20  b-tree layer.** 
2c4e0 74 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74  that this insert
2c4f0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
2c500 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
2c510 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
2c520 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
2c530 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
2c540 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2c550 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
2c560 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
2c570 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f  ction.  If the O
2c580 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c590 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74  t is clear,.** t
2c5a0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
2c5b0 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e  ounter is unchan
2c5c0 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ged..**.** If th
2c5d0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
2c5e0 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
2c5f0 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d  5 is set, the im
2c600 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
2c610 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72  ht.** run faster
2c620 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20   by avoiding an 
2c630 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b  unnecessary seek
2c640 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20   on cursor P1.  
2c650 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20  However,.** the 
2c660 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2c670 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f  SULT flag must o
2c680 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68  nly be set if th
2c690 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f  ere have been no
2c6a0 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20   prior.** seeks 
2c6b0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72  on the cursor or
2c6c0 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   if the most rec
2c6d0 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20  ent seek used a 
2c6e0 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a  key equivalent.*
2c6f0 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  * to P2. .**.** 
2c700 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2c710 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2c720 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
2c730 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
2c740 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
2c750 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
2c760 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2c770 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50  orterInsert P1 P
2c780 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c790 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2c7a0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2c7b0 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2c7c0 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2c7d0 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2c7e0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2c7f0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2c800 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2c810 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74  ** into the sort
2c820 65 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  er P1.  Data for
2c830 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2c840 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  l..*/.case OP_So
2c850 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20  rterInsert:     
2c860 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65    /* in2 */.case
2c870 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
2c880 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
2c890 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2c8a0 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f  pC;.  BtreePaylo
2c8b0 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  ad x;..  assert(
2c8c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2c8d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2c8e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2c8f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2c900 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2c910 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2c920 70 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pC);.  assert( p
2c930 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2c940 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2c950 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2c960 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
2c970 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2c980 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2c990 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
2c9a0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
2c9b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
2c9c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
2c9d0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2c9e0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c9f0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2ca00 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
2ca10 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2ca20 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
2ca30 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2ca40 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
2ca50 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
2ca60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2ca70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ca80 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2ca90 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2caa0 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  rt ){.    rc = s
2cab0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2cac0 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
2cad0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
2cae0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
2caf0 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e      x.pKey = pIn
2cb00 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d  2->z;.    x.aMem
2cb10 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70   = aMem + pOp->p
2cb20 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20  3;.    x.nMem = 
2cb30 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2cb40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2cb50 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
2cb60 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
2cb70 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
2cb80 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
2cb90 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
2cba0 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20  SITION)), .     
2cbb0 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
2cbc0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2cbd0 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
2cbe0 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
2cbf0 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
2cc00 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2cc10 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
2cc20 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2cc30 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2cc40 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
2cc50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2cc60 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2cc70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
2cc80 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
2cc90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2cca0 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
2ccb0 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
2ccc0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
2ccd0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
2cce0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
2ccf0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2cd00 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
2cd10 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
2cd20 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
2cd30 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
2cd40 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
2cd50 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
2cd60 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
2cd70 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2cd80 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2cd90 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
2cda0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
2cdb0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
2cdc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cdd0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
2cde0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2cdf0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
2ce00 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
2ce10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2ce20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2ce30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ce40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ce50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ce60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2ce70 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ce80 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c  E_BTREE );.  sql
2ce90 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2cea0 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
2ceb0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2cec0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2ced0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2cee0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cef0 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
2cf00 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2cf10 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2cf20 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
2cf30 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
2cf40 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
2cf50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2cf60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2cf70 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
2cf80 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
2cf90 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
2cfa0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2cfb0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2cfc0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2cfd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2cfe0 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
2cff0 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
2d000 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2d010 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d020 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
2d030 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2d040 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2d050 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2d060 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2d070 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
2d080 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  t = 0;.  break;.
2d090 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
2d0a0 66 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20  ferredSeek P1 * 
2d0b0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
2d0c0 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20  sis: Move P3 to 
2d0d0 50 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64  P1.rowid if need
2d0e0 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ed.**.** P1 is a
2d0f0 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72  n open index cur
2d100 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20  sor and P3 is a 
2d110 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f  cursor on the co
2d120 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74  rresponding.** t
2d130 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  able.  This opco
2d140 64 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72  de does a deferr
2d150 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50  ed seek of the P
2d160 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a  3 table cursor.*
2d170 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  * to the row tha
2d180 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2d190 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
2d1a0 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   of P1..**.** Th
2d1b0 69 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64  is is a deferred
2d1c0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
2d1d0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
2d1e0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
2d1f0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
2d200 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
2d210 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
2d220 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
2d230 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
2d240 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a  /O happens..**.*
2d250 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61  * P4 may be an a
2d260 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73  rray of integers
2d270 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52   (type P4_INTARR
2d280 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a  AY) containing.*
2d290 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * one entry for 
2d2a0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
2d2b0 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66  he P3 table.  If
2d2c0 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69   array entry a(i
2d2d0 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ).** is non-zero
2d2e0 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  , then reading c
2d2f0 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f  olumn a(i)-1 fro
2d300 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a  m cursor P3 is .
2d310 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  ** equivalent to
2d320 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20   performing the 
2d330 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e  deferred seek an
2d340 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  d then reading c
2d350 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d  olumn i .** from
2d360 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72   P1.  This infor
2d370 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  mation is stored
2d380 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20   in P3 and used 
2d390 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72  to redirect.** r
2d3a0 65 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20  eads against P3 
2d3b0 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73  over to P1, thus
2d3c0 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69   possibly avoidi
2d3d0 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a  ng the need to.*
2d3e0 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20  * seek and read 
2d3f0 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a  cursor P3..*/./*
2d400 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
2d410 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2d420 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2d430 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69  =rowid.**.** Wri
2d440 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
2d450 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
2d460 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
2d470 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
2d480 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
2d490 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
2d4a0 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
2d4b0 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
2d4c0 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
2d4d0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
2d4e0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
2d4f0 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
2d500 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
2d510 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
2d520 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
2d530 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
2d540 65 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65  e OP_DeferredSee
2d550 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  k:.case OP_IdxRo
2d560 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
2d570 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2d580 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
2d590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2d5a0 20 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72   P1 index cursor
2d5b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2d5c0 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20   *pTabCur;      
2d5d0 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c    /* The P2 tabl
2d5e0 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66  e cursor (OP_Def
2d5f0 65 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20  erredSeek only) 
2d600 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20  */.  i64 rowid; 
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d620 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50   /* Rowid that P
2d630 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73  1 current points
2d640 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
2d650 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d660 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2d670 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2d680 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2d690 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2d6a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2d6b0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2d6c0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2d6d0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2d6e0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
2d6f0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
2d700 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2d710 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2d720 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
2d730 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  rt( !pC->nullRow
2d740 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2d750 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2d760 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77  .  /* The IdxRow
2d770 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f  id and Seek opco
2d780 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64  des are combined
2d790 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20   because of the 
2d7a0 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a  commonality.  **
2d7b0 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43   of sqlite3VdbeC
2d7c0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61  ursorRestore() a
2d7d0 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64  nd sqlite3VdbeId
2d7e0 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72  xRowid(). */.  r
2d7f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2d800 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
2d810 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56  ;..  /* sqlite3V
2d820 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
2d830 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20  ) can only fail 
2d840 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  if the record ha
2d850 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20  s been deleted. 
2d860 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64   ** out from und
2d870 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  er the cursor.  
2d880 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20  That will never 
2d890 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49  happens for an I
2d8a0 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20  dxRowid.  ** or 
2d8b0 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  Seek opcode */. 
2d8c0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
2d8d0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
2d8e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d8f0 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d  ror;..  if( !pC-
2d900 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2d910 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
2d920 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2d930 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
2d940 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2d950 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2d960 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
2d970 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2d980 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28  &rowid);.    if(
2d990 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2d9a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
2d9b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d9c0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
2d9d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44  Op->opcode==OP_D
2d9e0 65 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20  eferredSeek ){. 
2d9f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2da00 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
2da10 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p3<p->nCursor );
2da20 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d  .      pTabCur =
2da30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2da40 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  3];.      assert
2da50 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a  ( pTabCur!=0 );.
2da60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2da70 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d  abCur->eCurType=
2da80 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2da90 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2daa0 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72  pTabCur->uc.pCur
2dab0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
2dac0 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2dad0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
2dae0 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52    pTabCur->nullR
2daf0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54  ow = 0;.      pT
2db00 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72  abCur->movetoTar
2db10 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  get = rowid;.   
2db20 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65     pTabCur->defe
2db30 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
2db40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2db50 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2db60 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70  TARRAY || pOp->p
2db70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20  4.ai==0 );.     
2db80 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61   pTabCur->aAltMa
2db90 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  p = pOp->p4.ai;.
2dba0 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70        pTabCur->p
2dbb0 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a  AltCursor = pC;.
2dbc0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2dbd0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2dbe0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2dbf0 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
2dc00 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
2dc10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2dc20 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2dc30 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2dc40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2dc50 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b  emSetNull(&aMem[
2dc60 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20  pOp->p2]);.  }. 
2dc70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2dc80 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
2dc90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2dca0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2dcb0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2dcc0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2dcd0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2dce0 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2dcf0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2dd00 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2dd10 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
2dd20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2dd30 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
2dd40 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
2dd50 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2dd60 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2dd70 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2dd80 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2dd90 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
2dda0 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
2ddb0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2ddc0 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
2ddd0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2dde0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2ddf0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2de00 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2de10 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2de20 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2de30 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2de40 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20   IdxGT P1 P2 P3 
2de50 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2de60 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2de70 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2de80 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2de90 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2dea0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2deb0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2dec0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2ded0 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
2dee0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2def0 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
2df00 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
2df10 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2df20 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2df30 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2df40 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
2df50 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
2df60 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2df70 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2df80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
2df90 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2dfa0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2dfb0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2dfc0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2dfd0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2dfe0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2dff0 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
2e000 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e010 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e020 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e030 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e040 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e050 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e060 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e070 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e080 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2e090 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2e0a0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2e0b0 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2e0c0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2e0d0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2e0e0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2e0f0 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2e100 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2e110 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2e120 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e130 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2e140 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2e150 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
2e160 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
2e170 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e180 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e190 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2e1a0 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50  IdxLE P1 P2 P3 P
2e1b0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e1c0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e1d0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e1e0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e1f0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e200 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e210 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e220 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e230 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2e240 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2e250 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2e260 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2e270 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2e280 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2e290 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2e2a0 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2e2b0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2e2c0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2e2d0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e2e0 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2e2f0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2e300 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2e310 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74  ump.** to P2. Ot
2e320 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2e330 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2e340 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2e350 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20  .case OP_IdxLE: 
2e360 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2e370 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
2e380 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2e390 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2e3a0 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
2e3b0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2e3c0 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20  P_IdxGE:  {     
2e3d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2e3e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2e3f0 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2e400 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2e410 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2e420 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2e430 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2e440 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2e450 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e460 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2e470 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
2e480 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
2e490 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2e4a0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2e4b0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2e4c0 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
2e4d0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2e4e0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2e4f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2e500 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
2e510 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2e520 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2e530 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
2e540 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2e550 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2e560 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2e570 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2e580 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
2e590 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2e5a0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2e5b0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2e5c0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
2e5d0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2e5e0 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
2e5f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2e600 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
2e610 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2e620 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2e630 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2e640 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
2e650 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2e670 45 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74  EBUG.  {.    int
2e680 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
2e690 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
2e6a0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2e6b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2e6c0 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20  Mem[i]) );.     
2e6d0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2e6e0 70 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d  pOp->p3+i, &aMem
2e6f0 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20  [pOp->p3+i]);.  
2e700 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
2e710 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
2e720 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2e730 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2e740 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2e750 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2e760 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
2e770 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
2e780 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
2e790 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
2e7a0 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
2e7b0 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
2e7c0 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
2e7d0 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
2e7e0 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
2e7f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2e800 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2e810 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2e820 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2e830 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
2e840 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2e850 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2e860 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2e870 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2e880 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2e890 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2e8a0 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2e8b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2e8c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e8d0 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20  ;.  if( res>0 ) 
2e8e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2e8f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e900 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
2e910 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2e920 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
2e930 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
2e940 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2e950 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
2e960 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
2e970 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2e980 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
2e990 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
2e9a0 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
2e9b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2e9c0 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
2e9d0 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
2e9e0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
2e9f0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
2ea00 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2ea10 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
2ea20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
2ea30 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
2ea40 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
2ea50 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
2ea60 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2ea70 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
2ea80 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
2ea90 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
2eaa0 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
2eab0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
2eac0 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
2ead0 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
2eae0 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
2eaf0 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
2eb00 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
2eb10 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
2eb20 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
2eb30 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
2eb40 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
2eb50 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
2eb60 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
2eb70 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
2eb80 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2eb90 65 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e  egister P2. If n
2eba0 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20  o page movement 
2ebb0 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
2ebc0 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62  cause the.** tab
2ebd0 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
2ebe0 20 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65   was already the
2ebf0 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
2ec00 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
2ec10 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74  a .** zero is st
2ec20 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2ec30 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43   P2.  If AUTOVAC
2ec40 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2ec50 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20  then a zero .** 
2ec60 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2ec70 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2ec80 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f  This opcode thro
2ec90 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2eca0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
2ecb0 69 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77  ive reader VMs w
2ecc0 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76  hen.** it is inv
2ecd0 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f  oked. This is do
2ece0 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20  ne to avoid the 
2ecf0 64 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63  difficulty assoc
2ed00 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75  iated with .** u
2ed10 70 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67  pdating existing
2ed20 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20   cursors when a 
2ed30 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76  root page is mov
2ed40 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43  ed in an AUTOVAC
2ed50 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  UUM .** database
2ed60 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20  . This error is 
2ed70 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74  thrown even if t
2ed80 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  he database is n
2ed90 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d  ot an AUTOVACUUM
2eda0 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72   .** db in order
2edb0 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64   to avoid introd
2edc0 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61  ucing an incompa
2edd0 74 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e  tibility between
2ede0 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20   autovacuum .** 
2edf0 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75  and non-autovacu
2ee00 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20  um modes..**.** 
2ee10 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
2ee20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
2ee30 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
2ee40 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  2 */.  int iMove
2ee50 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  d;.  int iDb;.. 
2ee60 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2ee70 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2ee80 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  0);.  assert( p-
2ee90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2eea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2eeb0 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2eec0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2eed0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2eee0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2eef0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2ef00 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2ef10 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2ef20 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2ef30 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2ef40 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2ef50 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2ef60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2ef70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2ef80 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2ef90 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2efa0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2efb0 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2efc0 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2efd0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2efe0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2eff0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2f000 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2f010 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2f020 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2f030 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2f040 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2f050 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2f060 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2f070 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2f080 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2f090 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2f0a0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2f0b0 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2f0c0 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2f0d0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2f0e0 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2f0f0 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2f100 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2f110 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2f120 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2f130 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2f140 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2f150 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2f160 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2f170 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2f180 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2f190 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2f1a0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2f1b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2f1c0 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2f1d0 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2f1e0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2f1f0 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2f200 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2f210 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2f220 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2f230 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2f240 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2f250 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2f260 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2f270 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2f280 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2f290 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2f2a0 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2f2b0 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2f2c0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2f2d0 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2f2e0 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2f2f0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2f300 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2f310 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2f320 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2f330 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2f340 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2f350 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2f360 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2f370 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2f380 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2f390 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2f3a0 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2f3b0 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2f3c0 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2f3d0 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2f3e0 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2f3f0 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2f400 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2f410 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2f420 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2f430 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2f440 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2f450 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2f460 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2f470 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2f480 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2f490 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2f4a0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2f4b0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2f4c0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2f4d0 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2f4e0 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2f4f0 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2f500 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2f510 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33  nge;. .  sqlite3
2f520 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2f530 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43  nter(p, 0);.  nC
2f540 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2f550 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f560 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2f570 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2f580 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2f590 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2f5a0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2f5b0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2f5c0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2f5d0 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2f5e0 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2f5f0 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2f600 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2f610 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2f620 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2f630 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2f640 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2f650 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2f660 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2f670 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2f680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2f690 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2f6a0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2f6b0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2f6c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2f6d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2f6e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2f6f0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2f700 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2f710 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2f720 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2f730 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2f740 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2f750 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2f760 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2f770 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2f780 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2f790 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2f7a0 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2f7b0 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2f7c0 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2f7d0 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2f7e0 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2f7f0 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2f800 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2f810 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2f820 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2f830 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2f840 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2f850 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2f860 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
2f870 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71  er(pC) ){.    sq
2f880 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2f890 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e  eset(db, pC->uc.
2f8a0 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
2f8b0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2f8c0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2f8d0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2f8e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2f8f0 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
2f900 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f910 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
2f920 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2f930 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  sor);.    if( rc
2f940 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2f950 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2f960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2f970 70 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72  pcode: CreateBtr
2f980 65 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ee P1 P2 P3 * *.
2f990 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2f9a0 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66  2]=root iDb=P1 f
2f9b0 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c  lags=P3.**.** Al
2f9c0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74  locate a new b-t
2f9d0 72 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ree in the main 
2f9e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2f9f0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2fa00 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73  .** TEMP databas
2fa10 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2fa20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2fa30 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2fa40 20 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61   P1>1.  The P3 a
2fa50 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  rgument must be 
2fa60 31 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29  1 (BTREE_INTKEY)
2fa70 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
2fa80 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65  le.** it must be
2fa90 20 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45   2 (BTREE_BLOBKE
2faa0 59 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20  Y) for an index 
2fab0 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  or WITHOUT ROWID
2fac0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
2fad0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
2fae0 6f 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65  of the new b-tre
2faf0 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
2fb00 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2fb10 61 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72  ase OP_CreateBtr
2fb20 65 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ee: {          /
2fb30 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2fb40 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pgno;.  Db *pDb;
2fb50 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ..  sqlite3VdbeI
2fb60 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2fb70 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20  p, 0);.  pOut = 
2fb80 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2fb90 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2fba0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2fbb0 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54  p->p3==BTREE_INT
2fbc0 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  KEY || pOp->p3==
2fbd0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b  BTREE_BLOBKEY );
2fbe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fbf0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2fc00 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2fc10 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2fc20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2fc30 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2fc40 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2fc50 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
2fc60 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2fc70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
2fc80 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20  >pBt!=0 );.  rc 
2fc90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
2fca0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
2fcb0 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e  Bt, &pgno, pOp->
2fcc0 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p3);.  if( rc ) 
2fcd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2fce0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d  o_error;.  pOut-
2fcf0 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
2fd00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2fd10 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20  de: SqlExec * * 
2fd20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e  * P4 *.**.** Run
2fd30 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
2fd40 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  nt or statements
2fd50 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
2fd60 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  e P4 string..*/.
2fd70 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a  case OP_SqlExec:
2fd80 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
2fd90 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2fda0 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53  (p, 0);.  db->nS
2fdb0 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d  qlExec++;.  rc =
2fdc0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
2fdd0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20  , pOp->p4.z, 0, 
2fde0 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  0, 0);.  db->nSq
2fdf0 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72  lExec--;.  if( r
2fe00 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2fe10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2fe20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2fe30 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
2fe40 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2fe50 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
2fe60 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
2fe70 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
2fe80 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
2fe90 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
2fea0 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
2feb0 20 63 6c 61 75 73 65 20 50 34 2e 20 20 49 66 20   clause P4.  If 
2fec0 50 34 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69  P4 is a NULL poi
2fed0 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0a 2a  nter, then the.*
2fee0 2a 20 65 6e 74 69 72 65 20 73 63 68 65 6d 61 20  * entire schema 
2fef0 66 6f 72 20 50 31 20 69 73 20 72 65 70 61 72 73  for P1 is repars
2ff00 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ed..**.** This o
2ff10 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2ff20 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
2ff30 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
2ff40 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
2ff50 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
2ff60 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
2ff70 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
2ff80 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
2ff90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
2ffa0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
2ffb0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
2ffc0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
2ffd0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
2ffe0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
2fff0 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
30000 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
30010 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
30020 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
30030 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
30040 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
30050 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
30060 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
30070 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
30080 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
30090 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
300a0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
300b0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
300c0 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
300d0 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
300e0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
300f0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
30100 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
30110 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
30120 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
30130 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
30140 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
30150 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
30160 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
30170 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
30180 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30190 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
301a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
301b0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
301c0 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 64 62  e3SchemaClear(db
301d0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65  ->aDb[iDb].pSche
301e0 6d 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62  ma);.    db->mDb
301f0 46 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c 41 47  Flags &= ~DBFLAG
30200 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a  _SchemaKnownOk;.
30210 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
30220 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44 62 2c  InitOne(db, iDb,
30230 20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 49 4e   &p->zErrMsg, IN
30240 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c  ITFLAG_AlterTabl
30250 65 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46  e);.    db->mDbF
30260 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
30270 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
30280 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
30290 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
302a0 20 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20    {.    zMaster 
302b0 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  = MASTER_NAME;. 
302c0 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
302d0 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
302e0 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  a.iDb = iDb;.   
302f0 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
30300 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
30310 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 6d  ;.    initData.m
30320 49 6e 69 74 46 6c 61 67 73 20 3d 20 30 3b 0a 20  InitFlags = 0;. 
30330 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
30340 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
30350 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
30360 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
30370 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
30380 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
30390 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
303a0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e  ->aDb[iDb].zDbSN
303b0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
303c0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
303d0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
303e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
303f0 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  OMEM_BKPT;.    }
30400 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
30410 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
30420 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
30430 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
30440 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
30450 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
30460 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
30470 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
30480 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
30490 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
304a0 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
304b0 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
304c0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
304d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
304e0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
304f0 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  .rc;.      sqlit
30500 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a  e3DbFreeNN(db, z
30510 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
30520 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
30530 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
30540 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
30550 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
30560 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
30570 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
30580 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
30590 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
305a0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61      }.    goto a
305b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
305c0 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  r;.  }.  break; 
305d0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
305e0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
305f0 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
30600 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
30610 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
30620 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
30630 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
30640 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
30650 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
30660 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
30670 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
30680 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
30690 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
306a0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
306b0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
306c0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
306d0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
306e0 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
306f0 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
30700 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
30710 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
30720 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
30730 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
30740 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
30750 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
30760 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
30770 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
30780 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
30790 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
307a0 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
307b0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
307c0 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
307d0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
307e0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
307f0 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
30800 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
30810 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
30820 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
30830 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
30840 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
30850 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
30860 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
30870 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
30880 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
30890 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
308a0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
308b0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
308c0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
308d0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
308e0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
308f0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
30900 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
30910 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
30920 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
30930 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
30940 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
30950 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
30960 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
30970 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
30980 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
30990 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
309a0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
309b0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
309c0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
309d0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
309e0 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
309f0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
30a00 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
30a10 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
30a20 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
30a30 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
30a40 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
30a50 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
30a60 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
30a70 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
30a80 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
30a90 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
30aa0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
30ab0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
30ac0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
30ad0 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
30ae0 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
30af0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
30b00 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
30b10 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
30b20 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
30b30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
30b40 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
30b50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
30b60 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
30b70 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
30b80 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
30b90 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
30ba0 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
30bb0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
30bc0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
30bd0 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
30be0 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
30bf0 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
30c00 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
30c10 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
30c20 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
30c30 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
30c40 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
30c50 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
30c60 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
30c70 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
30c80 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
30c90 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  {.  sqlite3VdbeI
30ca0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
30cb0 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  p, 0);.  sqlite3
30cc0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
30cd0 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
30ce0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
30cf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
30d00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30d10 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
30d20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
30d30 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
30d40 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20   P4 P5.**.** Do 
30d50 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
30d60 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
30d70 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
30d80 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
30d90 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
30da0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
30db0 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
30dc0 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
30dd0 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
30de0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
30df0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
30e00 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
30e10 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
30e20 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  ins one less tha
30e30 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  n the maximum nu
30e40 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
30e50 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
30e60 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
30e70 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
30e80 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
30e90 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
30ea0 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
30eb0 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
30ec0 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
30ed0 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
30ee0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
30ef0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
30f00 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
30f10 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
30f20 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
30f30 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
30f40 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
30f50 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50  s.** stored in P
30f60 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d  4_INTARRAY argum
30f70 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ent..**.** If P5
30f80 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
30f90 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
30fa0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
30fb0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
30fc0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
30fd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
30fe0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
30ff0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
31000 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
31010 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
31020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
31030 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
31040 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
31050 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
31060 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
31070 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
31080 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
31090 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
310a0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
310b0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
310c0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
310d0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
310e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
310f0 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
31100 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
31110 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
31120 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
31130 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
31140 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
31150 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
31160 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
31170 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
31180 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
31190 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
311a0 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d  p->p2;.  aRoot =
311b0 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61   pOp->p4.ai;.  a
311c0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
311d0 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f  ;.  assert( aRoo
311e0 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20  t[0]==nRoot );. 
311f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
31200 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
31210 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
31220 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45  Cursor) );.  pnE
31230 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
31240 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
31250 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
31260 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
31270 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
31280 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
31290 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
312a0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
312b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
312c0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
312d0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
312e0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
312f0 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
31300 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  p5) );.  z = sql
31310 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
31320 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
31330 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61  pOp->p5].pBt, &a
31340 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a  Root[1], nRoot,.
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31370 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
31380 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  +1, &nErr);.  sq
31390 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
313a0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
313b0 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
313c0 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
313d0 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
313e0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
313f0 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
31400 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
31410 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69  nErr-1;.    sqli
31420 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
31430 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
31440 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
31450 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
31460 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
31470 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
31480 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
31490 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
314a0 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
314b0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
314c0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
314d0 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
314e0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
314f0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
31500 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65   Synopsis: rowse
31510 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  t(P1)=r[P2].**.*
31520 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74  * Insert the int
31530 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
31540 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  by register P2 i
31550 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  nto a RowSet obj
31560 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72  ect.** held in r
31570 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
31580 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  * An assertion f
31590 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f  ails if P2 is no
315a0 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  t an integer..*/
315b0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41  .case OP_RowSetA
315c0 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  dd: {       /* i
315d0 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e  n1, in2 */.  pIn
315e0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
315f0 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
31600 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
31610 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
31620 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
31630 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  0 );.  if( (pIn1
31640 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
31650 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  ob)==0 ){.    if
31660 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
31670 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20  SetRowSet(pIn1) 
31680 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
31690 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c   }.  assert( sql
316a0 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77  ite3VdbeMemIsRow
316b0 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  Set(pIn1) );.  s
316c0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
316d0 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31  rt((RowSet*)pIn1
316e0 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b  ->z, pIn2->u.i);
316f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31700 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65  Opcode: RowSetRe
31710 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ad P1 P2 P3 * *.
31720 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
31730 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a  3]=rowset(P1).**
31740 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20  .** Extract the 
31750 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66  smallest value f
31760 72 6f 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f  rom the RowSet o
31770 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61  bject in P1.** a
31780 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
31790 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
317a0 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f  P3..** Or, if Ro
317b0 77 53 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69  wSet object P1 i
317c0 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
317d0 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
317e0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
317f0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
31800 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
31810 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
31820 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
31830 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
31840 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
31850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
31860 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
31870 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
31880 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 56  )==0 || sqlite3V
31890 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70  dbeMemIsRowSet(p
318a0 49 6e 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70  In1) );.  if( (p
318b0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
318c0 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20 20 20 7c 7c  _Blob)==0 .   ||
318d0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
318e0 78 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31  xt((RowSet*)pIn1
318f0 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20  ->z, &val)==0.  
31900 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f  ){.    /* The bo
31910 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65  olean index is e
31920 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69  mpty */.    sqli
31930 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
31940 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62  l(pIn1);.    Vdb
31950 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
31960 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
31970 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
31980 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
31990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
319a0 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
319b0 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
319c0 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61  x */.    VdbeBra
319d0 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
319e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
319f0 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
31a00 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
31a10 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
31a20 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
31a30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
31a40 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
31a50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
31a60 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
31a70 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
31a80 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
31a90 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
31aa0 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
31ab0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
31ac0 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
31ad0 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
31ae0 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
31af0 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
31b00 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
31b10 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
31b20 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
31b30 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
31b40 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
31b50 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
31b60 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
31b70 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
31b80 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
31b90 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
31ba0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
31bb0 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
31bc0 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65 74  e case where set
31bd0 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a  s of integers.**
31be0 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e   are inserted in
31bf0 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65 73   distinct phases
31c00 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65 74  , which each set
31c10 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
31c20 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68  licates..** Each
31c30 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66 69   set is identifi
31c40 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
31c50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
31c60 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
31c70 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
31c80 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61  inal set must ha
31c90 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66  ve P4==-1, and f
31ca0 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74  or all other set
31cb0 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  s.** must have P
31cc0 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4>0..**.** This 
31cd0 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
31ce0 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
31cf0 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
31d00 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
31d10 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   the RowSet obje
31d20 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
31d30 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
31d40 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
31d50 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
31d60 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
31d70 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
31d80 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
31d90 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
31da0 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
31db0 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
31dc0 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
31dd0 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
31de0 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
31df0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
31e00 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
31e10 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
31e20 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
31e30 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
31e40 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
31e50 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
31e60 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
31e70 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
31e80 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
31e90 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
31ea0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
31eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
31ec0 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
31ed0 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
31ee0 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
31ef0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31f00 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
31f10 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
31f20 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
31f30 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
31f40 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
31f50 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
31f60 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
31f70 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
31f80 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
31f90 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
31fa0 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
31fb0 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
31fc0 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
31fd0 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
31fe0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
31ff0 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
32000 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
32010 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
32020 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  1) ) goto no_mem
32030 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
32040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73  sqlite3VdbeMemIs
32050 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a  RowSet(pIn1) );.
32060 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32070 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
32080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
32090 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
320a0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
320b0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
320c0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
320d0 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e  ((RowSet*)pIn1->
320e0 7a 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75  z, iSet, pIn3->u
320f0 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
32100 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
32110 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
32120 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
32130 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69  p_to_p2;.  }.  i
32140 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
32150 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
32160 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70  nsert((RowSet*)p
32170 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e  In1->z, pIn3->u.
32180 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
32190 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
321a0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
321b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
321c0 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
321d0 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
321e0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
321f0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
32200 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
32210 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
32220 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
32230 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
32240 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
32250 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
32260 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
32270 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
32280 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
32290 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
322a0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
322b0 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
322c0 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
322d0 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
322e0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
322f0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
32300 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
32310 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
32320 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
32330 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
32340 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
32350 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
32360 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
32370 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
32380 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
32390 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
323a0 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
323b0 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
323c0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
323d0 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
323e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
323f0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
32400 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
32410 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
32420 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
32430 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
32440 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
32450 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
32460 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
32470 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
32480 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
32490 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
324a0 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
324b0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
324c0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
324d0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
324e0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
324f0 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
32500 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
32510 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
32520 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
32530 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
32540 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
32550 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
32560 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
32570 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
32580 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
32590 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
325a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
325b0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
325c0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
325d0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
325e0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
325f0 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
32600 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
32610 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
32620 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
32630 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
32640 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32660 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
32670 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
32680 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
32690 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
326a0 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
326b0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
326c0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
326d0 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
326e0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
326f0 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
32700 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
32710 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
32720 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
32730 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
32740 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
32750 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
32760 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
32770 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
32780 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
32790 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
327a0 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
327b0 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
327c0 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
327d0 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
327e0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
327f0 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
32800 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
32810 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
32820 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
32830 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
32840 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
32850 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
32860 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
32870 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
32880 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
32890 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
328a0 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
328b0 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
328c0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
328d0 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
328e0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
328f0 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
32900 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
32910 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
32920 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
32930 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
32940 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
32950 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
32960 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
32970 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
32980 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
32990 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
329a0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
329b0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
329c0 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
329d0 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
329e0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
329f0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
32a00 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
32a10 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
32a20 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
32a30 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
32a40 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
32a50 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
32a60 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
32a70 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  or(p, "too many 
32a80 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
32a90 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
32aa0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
32ab0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
32ac0 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
32ad0 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
32ae0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
32af0 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
32b00 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
32b10 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
32b20 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
32b30 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
32b40 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
32b50 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
32b60 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
32b70 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
32b80 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
32b90 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
32ba0 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
32bb0 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
32bc0 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
32bd0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
32be0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
32bf0 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  ags&MEM_Blob)==0
32c00 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
32c10 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
32c20 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
32c30 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
32c40 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
32c50 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
32c60 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
32c70 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
32c80 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
32c90 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
32ca0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
32cb0 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
32cc0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
32cd0 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
32ce0 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
32cf0 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
32d00 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
32d10 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
32d20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
32d30 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
32d40 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
32d50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d  ;.    assert( nM
32d60 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  em>0 );.    if( 
32d70 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
32d80 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20  0 ) nMem++;.    
32d90 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
32da0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
32db0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
32dc0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
32dd0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
32de0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
32df0 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
32e00 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  eCursor*).      
32e10 20 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67          + (pProg
32e20 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b  ram->nOp + 7)/8;
32e30 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
32e40 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
32e50 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
32e60 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
32e70 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
32e80 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
32e90 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
32ea0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
32eb0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
32ec0 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20  lob|MEM_Dyn;.   
32ed0 20 70 52 74 2d 3e 7a 20 3d 20 28 63 68 61 72 2a   pRt->z = (char*
32ee0 29 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  )pFrame;.    pRt
32ef0 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20  ->n = nByte;.   
32f00 20 70 52 74 2d 3e 78 44 65 6c 20 3d 20 73 71 6c   pRt->xDel = sql
32f10 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d 65 6d  ite3VdbeFrameMem
32f20 44 65 6c 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  Del;..    pFrame
32f30 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
32f40 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
32f50 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
32f60 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
32f70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
32f80 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
32f90 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
32fa0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
32fb0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
32fc0 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
32fd0 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
32fe0 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
32ff0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
33000 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
33010 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
33020 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
33030 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
33040 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
33050 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
33060 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
33070 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
33080 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
33090 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
330a0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
330b0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 23  anExec;.#endif.#
330c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
330d0 55 47 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 69  UG.    pFrame->i
330e0 46 72 61 6d 65 4d 61 67 69 63 20 3d 20 53 51 4c  FrameMagic = SQL
330f0 49 54 45 5f 46 52 41 4d 45 5f 4d 41 47 49 43 3b  ITE_FRAME_MAGIC;
33100 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
33110 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
33120 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
33130 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
33140 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
33150 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
33160 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
33170 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
33180 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
33190 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
331a0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
331b0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
331c0 20 70 46 72 61 6d 65 20 3d 20 28 56 64 62 65 46   pFrame = (VdbeF
331d0 72 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20  rame*)pRt->z;.  
331e0 20 20 61 73 73 65 72 74 28 20 70 52 74 2d 3e 78    assert( pRt->x
331f0 44 65 6c 3d 3d 73 71 6c 69 74 65 33 56 64 62 65  Del==sqlite3Vdbe
33200 46 72 61 6d 65 4d 65 6d 44 65 6c 20 29 3b 0a 20  FrameMemDel );. 
33210 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
33220 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
33230 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
33240 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20  ->nChildMem .   
33250 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61       || (pProgra
33260 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50  m->nCsr==0 && pP
33270 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d  rogram->nMem+1==
33280 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
33290 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  m) );.    assert
332a0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
332b0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
332c0 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
332d0 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61  t( (int)(pOp - a
332e0 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20  Op)==pFrame->pc 
332f0 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
33300 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
33310 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
33320 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
33330 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
33340 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
33350 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
33360 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
33370 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
33380 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
33390 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d  .  assert( pFram
333a0 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29  e->pAuxData==0 )
333b0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  ;.  pFrame->pAux
333c0 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61  Data = p->pAuxDa
333d0 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74  ta;.  p->pAuxDat
333e0 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61  a = 0;.  p->nCha
333f0 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
33400 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
33410 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
33420 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  = VdbeFrameMem(p
33430 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65  Frame);.  p->nMe
33440 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
33450 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
33460 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
33470 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
33480 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
33490 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
334a0 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61  p->nMem];.  pFra
334b0 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a  me->aOnce = (u8*
334c0 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67  )&p->apCsr[pProg
334d0 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65  ram->nCsr];.  me
334e0 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e  mset(pFrame->aOn
334f0 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d  ce, 0, (pProgram
33500 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20  ->nOp + 7)/8);. 
33510 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
33520 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
33530 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
33540 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20  am->nOp;.#ifdef 
33550 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
33560 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
33570 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23  p->anExec = 0;.#
33580 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61  endif.  pOp = &a
33590 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b  Op[-1];..  break
335a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
335b0 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
335c0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
335d0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
335e0 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
335f0 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
33600 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
33610 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
33620 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
33630 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
33640 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
33650 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
33660 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
33670 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
33680 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
33690 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
336a0 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
336b0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
336c0 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
336d0 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
336e0 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
336f0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
33700 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
33710 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
33720 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
33730 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
33740 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33750 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
33760 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33770 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
33780 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
33790 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
337a0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
337b0 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
337c0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
337d0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
337e0 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e  rame;.  Mem *pIn
337f0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
33800 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
33810 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  );.  pFrame = p-
33820 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
33830 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
33840 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
33850 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
33860 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
33870 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
33880 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
33890 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
338a0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
338b0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
338c0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
338d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
338e0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
338f0 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
33900 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
33910 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
33920 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a  fkctr[P1]+=P2.**
33930 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
33940 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
33950 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
33960 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
33970 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
33980 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
33990 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
339a0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
339b0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
339c0 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
339d0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
339e0 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
339f0 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
33a00 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
33a10 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
33a20 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
33a30 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
33a40 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
33a50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
33a60 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
33a70 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
33a80 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20  TE_DeferFKs ){. 
33a90 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
33aa0 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  ImmCons += pOp->
33ab0 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
33ac0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
33ad0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
33ae0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
33af0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
33b00 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
33b10 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
33b20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33b30 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
33b40 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
33b50 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d  is: if fkctr[P1]
33b60 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
33b70 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
33b80 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
33b90 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
33ba0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
33bb0 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
33bc0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
33bd0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
33be0 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
33bf0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
33c00 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
33c10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
33c20 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
33c30 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
33c40 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
33c50 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
33c60 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
33c70 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
33c80 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
33c90 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
33ca0 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
33cb0 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
33cc0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
33cd0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
33ce0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
33cf0 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
33d00 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
33d10 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
33d20 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
33d30 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
33d40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
33d50 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
33d60 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
33d70 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65  hTaken(db->nDefe
33d80 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
33d90 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
33da0 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
33db0 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
33dc0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
33dd0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
33de0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
33df0 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
33e00 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
33e10 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
33e20 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
33e30 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
33e40 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
33e50 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
33e60 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
33e70 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
33e80 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33e90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33ea0 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
33eb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
33ec0 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23  OREIGN_KEY */..#
33ed0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33ee0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
33ef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
33f00 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ax P1 P2 * * *.*
33f10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
33f20 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32  ]=max(r[P1],r[P2
33f30 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ]).**.** P1 is a
33f40 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
33f50 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
33f60 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
33f70 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
33f80 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
33f90 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
33fa0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
33fb0 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
33fc0 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
33fd0 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
33fe0 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
33ff0 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
34000 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
34010 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
34020 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
34030 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
34040 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
34050 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
34060 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
34070 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
34080 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
34090 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
340a0 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
340b0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
340c0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
340d0 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
340e0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
340f0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
34100 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
34110 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
34120 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
34130 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
34140 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
34150 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
34160 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
34170 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
34180 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
34190 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
341a0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
341b0 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
341c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
341d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
341e0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
341f0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
34200 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
34210 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
34220 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
34230 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
34240 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
34250 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
34260 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
34270 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
34280 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
34290 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31  [P1]>0 then r[P1
342a0 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a  ]-=P3, goto P2.*
342b0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
342c0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
342d0 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20   integer..** If 
342e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
342f0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
34300 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61   greater, subtra
34310 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a  ct P3 from the.*
34320 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e  * value in P1 an
34330 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  d jump to P2..**
34340 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
34350 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
34360 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
34370 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
34380 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
34390 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
343a0 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
343b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
343c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
343d0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
343e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
343f0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
34400 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34410 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
34420 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
34430 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
34440 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
34450 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
34460 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e  u.i>0 ){.    pIn
34470 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
34480 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  3;.    goto jump
34490 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
344a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
344b0 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50  e: OffsetLimit P
344c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
344d0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
344e0 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72  ]>0 then r[P2]=r
344f0 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d  [P1]+max(0,r[P3]
34500 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31  ) else r[P2]=(-1
34510 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ).**.** This opc
34520 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63  ode performs a c
34530 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d  ommonly used com
34540 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61  putation associa
34550 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49  ted with.** LIMI
34560 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f  T and OFFSET pro
34570 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c  cess.  r[P1] hol
34580 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75  ds the limit cou
34590 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20  nter.  r[P3].** 
345a0 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74  holds the offset
345b0 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f   counter.  The o
345c0 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74  pcode computes t
345d0 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75  he combined valu
345e0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49  e.** of the LIMI
345f0 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64  T and OFFSET and
34600 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c   stores that val
34610 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68  ue in r[P2].  Th
34620 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65  e r[P2].** value
34630 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65   computed is the
34640 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
34650 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20   rows that will 
34660 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69  need to be.** vi
34670 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74  sited in order t
34680 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71  o complete the q
34690 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72  uery..**.** If r
346a0 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P3] is zero or 
346b0 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
346c0 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
346d0 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72   OFFSET.** and r
346e0 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62  [P2] is set to b
346f0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
34700 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e  he LIMIT, r[P1].
34710 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20  .**.** if r[P1] 
34720 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
34730 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
34740 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
34750 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
34760 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a  s set to -1. .**
34770 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
34780 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74  [P2] is set to t
34790 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20  he sum of r[P1] 
347a0 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61  and r[P3]..*/.ca
347b0 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69  se OP_OffsetLimi
347c0 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20  t: {    /* in1, 
347d0 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  out2, in3 */.  i
347e0 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26  64 x;.  pIn1 = &
347f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34800 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
34810 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p3];.  pOut =
34820 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
34830 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
34840 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
34850 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
34860 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
34870 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
34880 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a   x = pIn1->u.i;.
34890 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71    if( x<=0 || sq
348a0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78  lite3AddInt64(&x
348b0 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49  , pIn3->u.i>0?pI
348c0 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20  n3->u.i:0) ){.  
348d0 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49    /* If the LIMI
348e0 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  T is less than o
348f0 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c  r equal to zero,
34900 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20   loop forever.  
34910 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64  This.    ** is d
34920 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20  ocumented.  But 
34930 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d  also, if the LIM
34940 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64  IT+OFFSET exceed
34950 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20  s 2^63 then.    
34960 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72  ** also loop for
34970 65 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75  ever.  This is u
34980 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e  ndocumented.  In
34990 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64   fact, one could
349a0 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68   argue.    ** th
349b0 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75  at the loop shou
349c0 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42  ld terminate.  B
349d0 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69  ut assuming 1 bi
349e0 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73  llion iterations
349f0 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f  .    ** per seco
34a00 6e 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e  nd (far exceedin
34a10 67 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69  g the capabiliti
34a20 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e  es of any curren
34a30 74 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20  t hardware).    
34a40 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65  ** it would take
34a50 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72   nearly 300 year
34a60 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65  s to actually re
34a70 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20  ach the limit.  
34a80 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e  So.    ** loopin
34a90 67 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72  g forever is a r
34aa0 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78  easonable approx
34ab0 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  imation. */.    
34ac0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a  pOut->u.i = -1;.
34ad0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
34ae0 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a  t->u.i = x;.  }.
34af0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
34b00 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f  pcode: IfNotZero
34b10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
34b20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
34b30 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d  1]!=0 then r[P1]
34b40 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  --, goto P2.**.*
34b50 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
34b60 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
34b70 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63  teger.  If the c
34b80 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
34b90 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74  er P1 is.** init
34ba0 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68  ially greater th
34bb0 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65  an zero, then de
34bc0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
34bd0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
34be0 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f  ..** If it is no
34bf0 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65  n-zero (negative
34c00 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e   or positive) an
34c10 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70  d then also jump
34c20 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20   to P2.  .** If 
34c30 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69  register P1 is i
34c40 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c  nitially zero, l
34c50 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65  eave it unchange
34c60 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
34c70 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
34c80 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
34c90 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
34ca0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
34cb0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
34cc0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
34cd0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
34ce0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
34cf0 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
34d00 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
34d10 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31  ){.     if( pIn1
34d20 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e  ->u.i>0 ) pIn1->
34d30 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f  u.i--;.     goto
34d40 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
34d50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
34d60 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70  Opcode: DecrJump
34d70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
34d80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
34d90 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f   (--r[P1])==0 go
34da0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
34db0 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c  ster P1 must hol
34dc0 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44  d an integer.  D
34dd0 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
34de0 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20  ue in P1.** and 
34df0 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  jump to P2 if th
34e00 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65  e new value is e
34e10 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a  xactly zero..*/.
34e20 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70  case OP_DecrJump
34e30 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Zero: {      /* 
34e40 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
34e50 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
34e60 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
34e70 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
34e80 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
34e90 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f  1->u.i>SMALLEST_
34ea0 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e  INT64 ) pIn1->u.
34eb0 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
34ec0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
34ed0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
34ee0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f  In1->u.i==0 ) go
34ef0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34f00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
34f10 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a  pcode: AggStep *
34f20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
34f30 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
34f40 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
34f50 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
34f60 74 65 20 74 68 65 20 78 53 74 65 70 20 66 75 6e  te the xStep fun
34f70 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
34f80 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66  regate..** The f
34f90 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
34fa0 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73  rguments.  P4 is
34fb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
34fc0 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74  e .** FuncDef st
34fd0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
34fe0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
34ff0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
35000 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
35010 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
35020 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
35030 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
35040 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
35050 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
35060 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
35070 41 67 67 49 6e 76 65 72 73 65 20 2a 20 50 32 20  AggInverse * P2 
35080 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
35090 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
350a0 5d 20 69 6e 76 65 72 73 65 28 72 5b 50 32 40 50  ] inverse(r[P2@P
350b0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
350c0 65 20 74 68 65 20 78 49 6e 76 65 72 73 65 20 66  e the xInverse f
350d0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
350e0 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65  ggregate..** The
350f0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
35100 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20   arguments.  P4 
35110 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35120 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20  the .** FuncDef 
35130 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
35140 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
35150 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
35160 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
35170 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
35180 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
35190 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
351a0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
351b0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
351c0 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
351d0 3a 20 41 67 67 53 74 65 70 31 20 50 31 20 50 32  : AggStep1 P1 P2
351e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
351f0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
35200 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
35210 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
35220 74 68 65 20 78 53 74 65 70 20 28 69 66 20 50 31  the xStep (if P1
35230 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73 65  ==0) or xInverse
35240 20 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e 63   (if P1!=0) func
35250 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20 61  tion for an.** a
35260 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 20 66  ggregate.  The f
35270 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
35280 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73  rguments.  P4 is
35290 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
352a0 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74  e .** FuncDef st
352b0 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
352c0 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
352d0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
352e0 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
352f0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
35300 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
35310 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
35320 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
35330 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
35340 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
35350 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79  ode is initially
35360 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67   coded as OP_Agg
35370 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74  Step0.  On first
35380 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20   evaluation,.** 
35390 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72  the FuncDef stor
353a0 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76  ed in P4 is conv
353b0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
353c0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e  lite3_context an
353d0 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20  d.** the opcode 
353e0 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20  is changed.  In 
353f0 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
35400 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  itialization of 
35410 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
35420 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70  ontext only happ
35430 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61  ens once, instea
35440 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c  d of on each cal
35450 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70  l to the.** step
35460 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61   function..*/.ca
35470 73 65 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  se OP_AggInverse
35480 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  :.case OP_AggSte
35490 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
354a0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
354b0 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
354c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
354d0 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e  4_FUNCDEF );.  n
354e0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
354f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
35500 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
35510 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
35520 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
35530 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
35540 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
35550 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
35560 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
35570 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
35580 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
35590 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
355a0 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71  n );.  pCtx = sq
355b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
355c0 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28  NN(db, n*sizeof(
355d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 20  sqlite3_value*) 
355e0 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
355f0 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d   (sizeof(pCtx[0]
35600 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20  ) + sizeof(Mem) 
35610 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  - sizeof(sqlite3
35620 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66  _value*)));.  if
35630 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f  ( pCtx==0 ) goto
35640 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d   no_mem;.  pCtx-
35650 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74  >pMem = 0;.  pCt
35660 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29  x->pOut = (Mem*)
35670 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29  &(pCtx->argv[n])
35680 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
35690 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75  emInit(pCtx->pOu
356a0 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
356b0 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
356c0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
356d0 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
356e0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
356f0 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
35700 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70   p;.  pCtx->skip
35710 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74 78  Flag = 0;.  pCtx
35720 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  ->isError = 0;. 
35730 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
35740 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
35750 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
35760 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
35770 74 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67 67  tx;..  /* OP_Agg
35780 49 6e 76 65 72 73 65 20 6d 75 73 74 20 68 61 76  Inverse must hav
35790 65 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50 5f 41  e P1==1 and OP_A
357a0 67 67 53 74 65 70 20 6d 75 73 74 20 68 61 76 65  ggStep must have
357b0 20 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73 73 65   P1==0 */.  asse
357c0 72 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f  rt( pOp->p1==(pO
357d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67  p->opcode==OP_Ag
357e0 67 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a 20 20  gInverse) );..  
357f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
35800 5f 41 67 67 53 74 65 70 31 3b 0a 20 20 2f 2a 20  _AggStep1;.  /* 
35810 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
35820 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a  o OP_AggStep */.
35830 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  }.case OP_AggSte
35840 70 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  p1: {.  int i;. 
35850 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
35860 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
35870 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Mem;..  assert( 
35880 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
35890 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
358a0 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
358b0 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
358c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64  [pOp->p3];..#ifd
358d0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
358e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
358f0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
35900 61 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  an OP_AggInverse
35910 20 63 61 6c 6c 2e 20 20 56 65 72 69 66 79 20 74   call.  Verify t
35920 68 61 74 20 78 53 74 65 70 20 68 61 73 20 61 6c  hat xStep has al
35930 77 61 79 73 0a 20 20 20 20 2a 2a 20 62 65 65 6e  ways.    ** been
35940 20 63 61 6c 6c 65 64 20 61 74 20 6c 65 61 73 74   called at least
35950 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61   once prior to a
35960 6e 79 20 78 49 6e 76 65 72 73 65 20 63 61 6c 6c  ny xInverse call
35970 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
35980 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78   pMem->uTemp==0x
35990 31 31 32 32 65 30 65 33 20 29 3b 0a 20 20 7d 65  1122e0e3 );.  }e
359a0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
359b0 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 53 74 65   is an OP_AggSte
359c0 70 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20 69 74  p call.  Mark it
359d0 20 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20 20 20   as such. */.   
359e0 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d 20 30   pMem->uTemp = 0
359f0 78 31 31 32 32 65 30 65 33 3b 0a 20 20 7d 0a 23  x1122e0e3;.  }.#
35a00 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
35a10 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
35a20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
35a30 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
35a40 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
35a50 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
35a60 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
35a70 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
35a80 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
35a90 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
35aa0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
35ab0 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
35ac0 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
35ad0 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
35ae0 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
35af0 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
35b00 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
35b10 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
35b20 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ect */.  if( pCt
35b30 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20  x->pMem != pMem 
35b40 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65  ){.    pCtx->pMe
35b50 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f  m = pMem;.    fo
35b60 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
35b70 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
35b80 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
35b90 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
35ba0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
35bb0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d  E_DEBUG.  for(i=
35bc0 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b  0; i<pCtx->argc;
35bd0 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
35be0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43  t( memIsValid(pC
35bf0 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a  tx->argv[i]) );.
35c00 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
35c10 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43  CE(pOp->p2+i, pC
35c20 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20  tx->argv[i]);.  
35c30 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d  }.#endif..  pMem
35c40 2d 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  ->n++;.  assert(
35c50 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
35c60 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
35c70 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
35c80 69 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a 20 20  isError==0 );.  
35c90 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b  assert( pCtx->sk
35ca0 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23 69 66  ipFlag==0 );.#if
35cb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35cc0 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66  _WINDOWFUNC.  if
35cd0 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
35ce0 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
35cf0 49 6e 76 65 72 73 65 29 28 70 43 74 78 2c 70 43  Inverse)(pCtx,pC
35d00 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
35d10 72 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  rgv);.  }else.#e
35d20 6e 64 69 66 0a 20 20 28 70 43 74 78 2d 3e 70 46  ndif.  (pCtx->pF
35d30 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
35d40 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
35d50 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
35d60 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
35d70 2a 2f 0a 0a 20 20 69 66 28 20 70 43 74 78 2d 3e  */..  if( pCtx->
35d80 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 69  isError ){.    i
35d90 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  f( pCtx->isError
35da0 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
35db0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35dc0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
35dd0 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70  lue_text(pCtx->p
35de0 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  Out));.      rc 
35df0 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b  = pCtx->isError;
35e00 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
35e10 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b  Ctx->skipFlag ){
35e20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
35e30 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
35e40 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
35e50 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
35e60 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29  1;.      if( i )
35e70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
35e80 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d  etInt64(&aMem[i]
35e90 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74 78  , 1);.      pCtx
35ea0 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  ->skipFlag = 0;.
35eb0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
35ec0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
35ed0 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20  pCtx->pOut);.   
35ee0 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
35ef0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
35f00 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72     pCtx->isError
35f10 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 63   = 0;.    if( rc
35f20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35f30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
35f40 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
35f50 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pOut->flags==MEM
35f60 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72  _Null );.  asser
35f70 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  t( pCtx->skipFla
35f80 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  g==0 );.  break;
35f90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
35fa0 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
35fb0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
35fc0 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
35fd0 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  P2.**.** P1 is t
35fe0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
35ff0 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
36000 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 61  ccumulator for a
36010 6e 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 6f  n aggregate.** o
36020 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  r window functio
36030 6e 2e 20 20 45 78 65 63 75 74 65 20 74 68 65 20  n.  Execute the 
36040 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
36050 6f 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 67  on .** for an ag
36060 67 72 65 67 61 74 65 20 61 6e 64 20 73 74 6f 72  gregate and stor
36070 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
36080 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  P1..**.** P2 is 
36090 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
360a0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
360b0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
360c0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
360d0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
360e0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
360f0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
36100 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
36110 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
36120 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
36130 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
36140 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
36150 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
36160 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
36170 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
36180 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
36190 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
361a0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
361b0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  the case where.*
361c0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
361d0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
361e0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
361f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
36200 56 61 6c 75 65 20 2a 20 50 32 20 50 33 20 50 34  Value * P2 P3 P4
36210 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36220 72 5b 50 33 5d 3d 76 61 6c 75 65 20 4e 3d 50 32  r[P3]=value N=P2
36230 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68  .**.** Invoke th
36240 65 20 78 56 61 6c 75 65 28 29 20 66 75 6e 63 74  e xValue() funct
36250 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20 74 68  ion and store th
36260 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
36270 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50  ster P3..**.** P
36280 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
36290 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
362a0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
362b0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
362c0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
362d0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
362e0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
362f0 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
36300 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
36310 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
36320 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
36330 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
36340 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
36350 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
36360 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
36370 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
36380 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
36390 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
363a0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
363b0 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
363c0 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
363d0 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
363e0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
363f0 67 67 56 61 6c 75 65 3a 0a 63 61 73 65 20 4f 50  ggValue:.case OP
36400 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
36410 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
36420 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
36430 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
36440 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
36450 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
36460 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f  pOp->p3==0 || pO
36470 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67  p->opcode==OP_Ag
36480 67 56 61 6c 75 65 20 29 3b 0a 20 20 70 4d 65 6d  gValue );.  pMem
36490 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
364a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
364b0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
364c0 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
364d0 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  ==0 );.#ifndef S
364e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
364f0 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d  WFUNC.  if( pOp-
36500 3e 70 33 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  >p3 ){.    rc = 
36510 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 67  sqlite3VdbeMemAg
36520 67 56 61 6c 75 65 28 70 4d 65 6d 2c 20 26 61 4d  gValue(pMem, &aM
36530 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70  em[pOp->p3], pOp
36540 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 20  ->p4.pFunc);.   
36550 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
36560 70 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a  p->p3];.  }else.
36570 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 72  #endif.  {.    r
36580 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
36590 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
365a0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
365b0 0a 20 20 7d 0a 20 20 0a 20 20 69 66 28 20 72 63  .  }.  .  if( rc
365c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
365d0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
365e0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
365f0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
36600 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36610 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
36620 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
36630 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
36640 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
36650 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
36660 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
36670 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
36680 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
36690 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
366a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
366b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
366c0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
366d0 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
366e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
366f0 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
36700 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
36710 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
36720 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
36730 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
36740 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
36750 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
36760 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
36770 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
36780 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
36790 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
367a0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
367b0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
367c0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
367d0 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
367e0 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
367f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
36800 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
36810 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
36820 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
36830 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
36840 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
36850 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
36860 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
36870 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
36880 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
36890 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
368a0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
368b0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
368c0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
368d0 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
368e0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
368f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
36900 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
36910 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
36920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36930 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
36940 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
36970 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
369a0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
369b0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
369c0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
369d0 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
369e0 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
369f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36a00 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
36a10 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
36a20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
36a30 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
36a40 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
36a50 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
36a60 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
36a70 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
36a80 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
36a90 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
36aa0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
36ab0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
36ac0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
36ad0 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
36ae0 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
36af0 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
36b00 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
36b10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36b20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
36b30 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
36b40 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
36b50 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
36b60 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
36b70 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
36b80 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
36b90 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
36ba0 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
36bb0 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
36bc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
36bd0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
36be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
36bf0 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
36c00 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
36c10 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
36c20 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
36c30 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
36c40 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
36c50 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
36c60 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
36c70 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
36c80 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
36c90 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
36ca0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
36cb0 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
36cc0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
36cd0 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
36ce0 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
36cf0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
36d00 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
36d10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
36d20 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
36d30 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
36d40 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
36d50 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
36d60 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
36d70 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
36d80 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
36d90 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
36da0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
36db0 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
36dc0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
36dd0 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36df0 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
36e00 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
36e10 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
36e20 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
36e30 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
36e40 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
36e50 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
36e60 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
36e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
36e80 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
36e90 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36eb0 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
36ec0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
36ed0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36ee0 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
36ef0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
36f00 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
36f10 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
36f20 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
36f30 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
36f40 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
36f50 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
36f60 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
36f70 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
36f80 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
36f90 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
36fa0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
36fb0 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
36fc0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
36fd0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
36fe0 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
36ff0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
37000 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
37010 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
37020 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37030 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
37040 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
37050 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
37060 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
37070 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37080 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
37090 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
370a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
370b0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
370c0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
370d0 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
370e0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
370f0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
37100 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
37110 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
37120 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
37130 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
37140 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
37150 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37160 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
37170 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
37180 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
37190 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
371a0 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
371b0 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
371c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
371d0 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
371e0 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
371f0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
37200 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
37210 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
37220 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
37230 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
37240 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
37250 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
37260 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
37270 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
37280 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
37290 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
372a0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
372b0 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
372c0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
372d0 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
372e0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
372f0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
37300 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
37310 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
37320 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
37330 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
37340 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
37350 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
37360 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
37370 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
37380 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
37390 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
373a0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
373b0 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
373c0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
373d0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
373e0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
373f0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
37400 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
37410 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
37420 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
37430 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
37440 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
37450 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
37460 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37470 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
37480 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
37490 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
374a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
374b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
374c0 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
374d0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
374e0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
374f0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
37500 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
37510 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
37520 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
37530 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
37540 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
37550 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
37560 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
37570 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
37580 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
37590 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
375a0 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
375b0 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
375c0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
375d0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
375e0 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
375f0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
37600 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
37610 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
37620 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29  eWal(pPager, db)
37630 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
37640 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
37650 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
37660 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
37670 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
37680 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
37690 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
376a0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
376b0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
376c0 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
376d0 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
376e0 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
376f0 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
37700 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
37710 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
37720 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
37730 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
37740 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
37750 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
37760 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
37770 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
37780 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
37790 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
377a0 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
377b0 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
377c0 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
377d0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
377e0 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
377f0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
37800 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
37810 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
37820 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
37830 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
37840 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
37850 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
37860 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
37870 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
37880 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
37890 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
378a0 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
378b0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
378c0 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
378d0 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
378e0 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65  f( rc ) eNew = e
378f0 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71  Old;.  eNew = sq
37900 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
37910 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
37920 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d   eNew);..  pOut-
37930 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
37940 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
37950 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
37960 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
37970 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
37980 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
37990 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
379a0 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
379b0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
379c0 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
379d0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
379e0 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
379f0 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ing);.  if( rc )
37a00 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37a10 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
37a20 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
37a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
37a40 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
37a50 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
37a60 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
37a70 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
37a80 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
37a90 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a  e: Vacuum P1 * *
37aa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
37ab0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
37ac0 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73  abase P1.  P1 is
37ad0 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61   0 for "main", a
37ae0 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  nd 2 or more.** 
37af0 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20  for an attached 
37b00 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22  database.  The "
37b10 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d  temp" database m
37b20 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d  ay not be vacuum
37b30 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
37b40 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
37b50 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
37b60 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
37b70 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
37b80 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f  >zErrMsg, db, pO
37b90 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
37ba0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37bb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
37bc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
37bd0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
37be0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
37bf0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
37c00 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
37c10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
37c20 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
37c30 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
37c40 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
37c50 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
37c60 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
37c70 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
37c80 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
37c90 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
37ca0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
37cb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
37cc0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
37cd0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
37ce0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
37cf0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
37d00 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
37d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
37d20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
37d30 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
37d40 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
37d50 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
37d60 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
37d70 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
37d80 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
37d90 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
37da0 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
37db0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
37dc0 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
37dd0 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
37de0 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
37df0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
37e00 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
37e10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37e20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
37e30 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
37e40 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
37e50 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
37e60 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
37e70 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
37e80 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
37e90 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
37ea0 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
37eb0 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
37ec0 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
37ed0 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
37ee0 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
37ef0 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
37f00 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
37f10 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
37f20 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
37f30 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
37f40 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
37f50 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
37f60 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
37f70 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
37f80 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
37f90 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
37fa0 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
37fb0 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
37fc0 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
37fd0 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
37fe0 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
37ff0 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
38000 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
38010 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
38020 20 30 2c 20 74 68 65 6e 20 53 51 4c 20 73 74 61   0, then SQL sta
38030 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 70 69  tements are expi
38040 72 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  red immediately.
38050 20 20 49 66 20 50 32 20 69 73 20 31 2c 0a 2a 2a    If P2 is 1,.**
38060 20 74 68 65 6e 20 72 75 6e 6e 69 6e 67 20 53 51   then running SQ
38070 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  L statements are
38080 20 61 6c 6c 6f 77 65 64 20 74 6f 20 63 6f 6e 74   allowed to cont
38090 69 6e 75 65 20 74 6f 20 72 75 6e 20 74 6f 20 63  inue to run to c
380a0 6f 6d 70 6c 65 74 69 6f 6e 2e 0a 2a 2a 20 54 68  ompletion..** Th
380b0 65 20 50 32 3d 3d 31 20 63 61 73 65 20 6f 63 63  e P2==1 case occ
380c0 75 72 73 20 77 68 65 6e 20 61 20 43 52 45 41 54  urs when a CREAT
380d0 45 20 49 4e 44 45 58 20 6f 72 20 73 69 6d 69 6c  E INDEX or simil
380e0 61 72 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  ar schema change
380f0 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 68 61 74   happens.** that
38100 20 6d 69 67 68 74 20 68 65 6c 70 20 74 68 65 20   might help the 
38110 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 20 66 61  statement run fa
38120 73 74 65 72 20 62 75 74 20 77 68 69 63 68 20 64  ster but which d
38130 6f 65 73 20 6e 6f 74 20 61 66 66 65 63 74 20 74  oes not affect t
38140 68 65 0a 2a 2a 20 63 6f 72 72 65 63 74 6e 65 73  he.** correctnes
38150 73 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  s of operation..
38160 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
38170 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
38180 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p2==0 || pOp
38190 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 69 66 28  ->p2==1 );.  if(
381a0 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
381b0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
381c0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
381d0 28 64 62 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  (db, pOp->p2);. 
381e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
381f0 78 70 69 72 65 64 20 3d 20 70 4f 70 2d 3e 70 32  xpired = pOp->p2
38200 2b 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  +1;.  }.  break;
38210 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
38220 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
38230 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
38240 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
38250 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
38260 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
38270 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
38280 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
38290 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
382a0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
382b0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only