/ Hex Artifact Content
Login

Artifact 0321eb484160353d48accd3e67e06191173c6caa5f9995314021159017a5678b:


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: 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
f930: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
f940: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
f950: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 21 3d  TE_JUMPIFNULL)!=
f960: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
f970: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
f980: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f990: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f9a0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f9b0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f9c0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
f9d0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
f9e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f9f0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
fa00: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fa10: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fa20: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fa30: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fa40: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fa50: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fa60: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fa70: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fa80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fa90: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
faa0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fab0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fac0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fad0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fae0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
faf0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fb00: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fb10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fb20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fb30: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
fb40: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
fb50: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
fb60: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
fb70: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
fb80: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
fb90: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
fba0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
fbb0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fbc0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
fbd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
fbe0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
fbf0: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
fc00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fc10: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fc20: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
fc30: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
fc40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fc50: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
fc60: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
fc70: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
fc80: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
fc90: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
fca0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
fcb0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
fcc0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
fcd0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
fce0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
fcf0: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
fd00: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
fd10: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
fd20: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
fd30: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
fd40: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
fd50: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
fd60: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
fd70: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
fd80: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  0);.          as
fd90: 73 65 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49  sert( flags3==pI
fda0: 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20  n3->flags );.   
fdb0: 20 20 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61         /* testca
fdc0: 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33  se( flags3!=pIn3
fdd0: 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
fde0: 20 20 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65       ** this use
fdf0: 64 20 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65  d to be possible
fe00: 20 77 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33   with pIn1==pIn3
fe10: 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a  , but not since.
fe20: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
fe30: 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61   column cache wa
fe40: 73 20 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20  s removed.  The 
fe50: 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e  following assign
fe60: 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a  ment.          *
fe70: 2a 20 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79  * is essentially
fe80: 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20   a no-op.  But, 
fe90: 69 74 20 70 72 6f 76 69 64 65 73 20 64 65 66 65  it provides defe
fea0: 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20  nse-in-depth.   
feb0: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73         ** in cas
fec0: 65 20 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69  e our analysis i
fed0: 73 20 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20  s incorrect, so 
fee0: 69 74 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a  it is left in. *
fef0: 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
ff00: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
ff10: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ff20: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
ff30: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
ff40: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
ff50: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
ff60: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
ff70: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
ff80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ff90: 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e    }.      /* Han
ffa0: 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
ffb0: 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63  ase of integer c
ffc0: 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20  omparison here, 
ffd0: 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  as an.      ** o
ffe0: 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20  ptimization, to 
fff0: 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20  avoid a call to 
10000 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10010 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  e() */.      if(
10020 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10030 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10040 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
10050 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10060 2e 69 20 3e 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 2b 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 69 66 28 20 70 49 6e 33 2d         if( pIn3-
100a0 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69  >u.i < pIn1->u.i
100b0 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f   ){ res = -1; go
100c0 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
100d0 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
100e0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63  ;.        goto c
100f0 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20  ompare_op;.     
10100 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
10110 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
10120 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
10130 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10140 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
10150 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
10160 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
10170 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10180 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10190 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
101a0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
101b0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
101c0 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
101d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
101e0 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
101f0 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10200 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10210 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79  ( (flags1&MEM_Dy
10220 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  n) != (pIn1->fla
10230 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10240 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20         flags1 = 
10250 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn1->flags & ~
10260 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
10270 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79  (flags1 & MEM_Ty
10280 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20  peMask);.       
10290 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
102a0 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  In3 );.      }. 
102b0 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
102c0 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
102d0 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
102e0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
102f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10300 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10310 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10320 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10330 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
10340 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10350 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10360 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10370 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10380 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10390 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
103a0 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
103b0 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
103c0 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
103d0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
103e0 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
103f0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
10400 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10410 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
10420 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
10430 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
10440 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10450 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
10460 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10470 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10480 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63  p4.pColl);.  }.c
10490 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20  ompare_op:.  /* 
104a0 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72  At this point, r
104b0 65 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20  es is negative, 
104c0 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76  zero, or positiv
104d0 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a  e if reg[P1] is.
104e0 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20    ** less than, 
104f0 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
10500 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33  ater than reg[P3
10510 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ], respectively.
10520 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74    Compute.  ** t
10530 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69  he answer to thi
10540 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65  s operator in re
10550 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  s2, depending on
10560 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72   what the compar
10570 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74  ison.  ** operat
10580 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20  or actually is. 
10590 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
105a0 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20  of code depends 
105b0 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a  on the fact.  **
105c0 20 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70   that the 6 comp
105d0 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
105e0 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65   are consecutive
105f0 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69   integers in thi
10600 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e  s.  ** order:  N
10610 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c  E, EQ, GT, LE, L
10620 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72  T, GE */.  asser
10630 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b  t( OP_Eq==OP_Ne+
10640 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f  1 ); assert( OP_
10650 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61  Gt==OP_Ne+2 ); a
10660 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50  ssert( OP_Le==OP
10670 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  _Ne+3 );.  asser
10680 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b  t( OP_Lt==OP_Ne+
10690 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f  4 ); assert( OP_
106a0 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20  Ge==OP_Ne+5 );. 
106b0 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20   if( res<0 ){   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20       /* ne, eq, 
106e0 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a  gt, le, lt, ge *
106f0 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  /.    static con
10700 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10710 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aLTb[] = { 1,  
10720 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20  0,  0,  1,  1,  
10730 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  0 };.    res2 = 
10740 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aLTb[pOp->opcode
10750 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c   - OP_Ne];.  }el
10760 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  se if( res==0 ){
10770 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10780 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10790 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31  aEQb[] = { 0,  1
107a0 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31  ,  0,  1,  0,  1
107b0 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
107c0 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  EQb[pOp->opcode 
107d0 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
107e0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
107f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
10800 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20  r aGTb[] = { 1, 
10810 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20   0,  1,  0,  0, 
10820 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   1 };.    res2 =
10830 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aGTb[pOp->opcod
10840 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a  e - OP_Ne];.  }.
10850 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10860 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10870 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10880 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10890 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
108a0 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
108b0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
108c0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
108d0 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
108e0 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
108f0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
10900 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
10910 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
10920 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
10930 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
10940 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10950 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10960 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10970 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10980 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73    iCompare = res
10990 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
109a0 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50  p5 & SQLITE_KEEP
109b0 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20  NULL)!=0 ){.    
109c0 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c    /* The KEEPNUL
109d0 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20  L flag prevents 
109e0 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Eq from overw
109f0 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69  riting a NULL wi
10a00 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e  th 1.      ** an
10a10 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65  d prevents OP_Ne
10a20 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10a30 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20  g NULL with 0.  
10a40 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20  This flag.      
10a50 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  ** is only used 
10a60 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  in contexts wher
10a70 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20  e either:.      
10a80 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f  **   (1) op==OP_
10a90 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Eq && (r[P2]==NU
10aa0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a  LL || r[P2]==0).
10ab0 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f        **   (2) o
10ac0 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50  p==OP_Ne && (r[P
10ad0 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32  2]==NULL || r[P2
10ae0 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54  ]==1).      ** T
10af0 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e  herefore it is n
10b00 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  ot necessary to 
10b10 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e  check the conten
10b20 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20  t of r[P2] for. 
10b30 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f       ** NULL. */
10b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10b50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
10b60 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
10b70 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10b80 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30   assert( res2==0
10b90 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20   || res2==1 );. 
10ba0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10bb0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
10bc0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10bd0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10be0 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
10bf0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
10c00 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
10c10 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
10c20 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
10c30 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
10c40 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
10c50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10c60 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  );.      if( (pO
10c70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10c80 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b  )==res2 ) break;
10c90 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62  .    }.    memAb
10ca0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10cb0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
10cc0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10cd0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
10ce0 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20  t->u.i = res2;. 
10cf0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10d00 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
10d10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
10d20 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
10d30 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
10d40 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
10d50 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
10d60 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
10d70 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
10d80 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
10d90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
10da0 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
10db0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
10dc0 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
10dd0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
10de0 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
10df0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
10e00 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
10e10 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
10e20 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
10e30 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
10e40 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
10e50 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
10e60 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
10e70 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
10e80 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
10e90 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
10ea0 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
10eb0 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
10ec0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
10ed0 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
10ee0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
10ef0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
10f00 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
10f10 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
10f20 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
10f30 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
10f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
10f50 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
10f60 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
10f70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
10f80 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
10f90 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
10fa0 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
10fb0 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
10fc0 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
10fd0 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
10fe0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10ff0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11000 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11010 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11020 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11030 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11040 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11050 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
11060 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
11070 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  ion.  The permut
11080 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
11090 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  in the P4 operan
110a0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  d..**.** The per
110b0 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
110c0 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
110d0 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
110e0 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
110f0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11100 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
11110 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
11120 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
11130 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
11140 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
11150 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
11160 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
11170 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65  t integer in the
11180 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61   P4 integer arra
11190 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20  y is the length 
111a0 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  of the array.** 
111b0 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63  and does not bec
111c0 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  ome part of the 
111d0 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a  permutation..*/.
111e0 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
111f0 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
11200 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
11210 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
11220 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
11230 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  i );.  assert( p
11240 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
11250 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73  _Compare );.  as
11260 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20  sert( pOp[1].p5 
11270 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11280 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
11290 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
112a0 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
112b0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
112c0 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
112d0 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
112e0 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
112f0 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
11300 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
11310 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
11320 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
11330 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
11340 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
11350 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
11360 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
11370 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
11380 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
11390 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
113a0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
113b0 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
113c0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
113d0 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
113e0 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
113f0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
11400 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
11410 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
11420 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
11430 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
11440 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
11450 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
11460 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
11470 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
11480 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
11490 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
114a0 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
114b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
114c0 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
114d0 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
114e0 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
114f0 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
11500 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
11510 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
11520 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
11530 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
11540 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
11550 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
11560 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
11570 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
11580 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
11590 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
115a0 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
115b0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
115c0 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
115d0 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
115e0 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
115f0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
11600 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
11610 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
11620 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
11630 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
11640 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
11650 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
11660 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11670 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
11680 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
11690 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
116a0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
116b0 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
116c0 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  rder */.  int *a
116d0 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20  Permute;     /* 
116e0 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
116f0 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
11700 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
11710 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  UTE)==0 ){.    a
11720 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d  Permute = 0;.  }
11730 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
11740 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
11750 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
11760 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d  .opcode==OP_Perm
11770 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61  utation );.    a
11780 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
11790 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
117a0 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75  AY );.    aPermu
117b0 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  te = pOp[-1].p4.
117c0 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65  ai + 1;.    asse
117d0 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20  rt( aPermute!=0 
117e0 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70  );.  }.  n = pOp
117f0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
11800 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
11810 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
11820 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
11830 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
11840 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
11850 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
11860 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
11870 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
11880 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
11890 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
118a0 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
118b0 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
118c0 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
118d0 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
118e0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
118f0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11900 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11910 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
11920 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
11930 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11940 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  r)+1 );.  }else{
11950 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11960 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p1+n<=(p->n
11970 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
11980 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
11990 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
119a0 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
119b0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
119c0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
119d0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
119e0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
119f0 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
11a00 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
11a10 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
11a20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
11a30 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
11a40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11a50 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11a60 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
11a70 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11a80 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
11a90 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
11aa0 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
11ab0 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
11ac0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
11ad0 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46  <pKeyInfo->nKeyF
11ae0 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
11af0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
11b00 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
11b10 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
11b20 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
11b30 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
11b40 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
11b50 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
11b60 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
11b70 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
11b80 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
11b90 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
11ba0 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
11bb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
11bc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11bd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
11be0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11bf0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
11c00 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
11c10 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
11c20 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
11c30 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
11c40 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
11c50 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
11c60 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
11c70 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
11c80 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
11c90 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
11ca0 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
11cb0 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
11cc0 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11ce0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
11cf0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56  mpare<0 ){.    V
11d00 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
11d10 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,4); pOp = &aOp[
11d20 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20  pOp->p1 - 1];.  
11d30 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
11d40 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62  re==0 ){.    Vdb
11d50 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34  eBranchTaken(1,4
11d60 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11d70 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p2 - 1];.  }e
11d80 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
11d90 6e 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70  nchTaken(2,4); p
11da0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11db0 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72  3 - 1];.  }.  br
11dc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11dd0 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
11de0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11df0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
11e00 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11e10 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
11e20 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
11e30 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
11e40 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
11e50 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
11e60 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
11e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
11e80 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
11e90 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
11ea0 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
11eb0 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
11ec0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
11ed0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
11ee0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
11ef0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
11f00 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
11f10 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
11f20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11f30 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
11f40 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11f50 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
11f60 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
11f70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
11f80 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
11f90 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
11fa0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
11fb0 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
11fc0 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
11fd0 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
11fe0 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
11ff0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
12000 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12010 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12020 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
12030 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
12040 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
12050 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
12060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12070 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
12080 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
12090 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
120a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
120b0 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
120c0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
120d0 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
120e0 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
120f0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12100 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12110 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
12120 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
12130 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
12140 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12150 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
12160 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
12170 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26  beBooleanValue(&
12180 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32  aMem[pOp->p1], 2
12190 29 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65  );.  v2 = sqlite
121a0 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
121b0 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  e(&aMem[pOp->p2]
121c0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  , 2);.  if( pOp-
121d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
121e0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
121f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12200 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
12210 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
12220 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
12230 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
12240 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
12250 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
12260 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
12270 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
12280 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
12290 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
122a0 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
122b0 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
122c0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
122d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
122e0 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
122f0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
12300 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
12310 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
12320 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
12330 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
12340 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
12350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12360 70 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31  pcode: IsTrue P1
12370 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
12380 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d  ynopsis: r[P2] =
12390 20 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d   coalesce(r[P1]=
123a0 3d 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a  =TRUE,P3) ^ P4.*
123b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
123c0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
123d0 49 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53  IS TRUE, IS FALS
123e0 45 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20  E, IS NOT TRUE, 
123f0 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41  and.** IS NOT FA
12400 4c 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a  LSE operators..*
12410 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12420 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12430 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12440 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12450 72 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65  re that.** boole
12460 61 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e  an (a 0 or 1) in
12470 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f   register P2.  O
12480 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  r if the value i
12490 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
124a0 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
124b0 74 68 65 20 50 33 20 69 73 20 73 74 6f 72 65 64  the P3 is stored
124c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
124d0 20 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73    Invert the ans
124e0 77 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20  wer if P4.** is 
124f0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67  1..**.** The log
12500 69 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64  ic is summarized
12510 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   like this:.**.*
12520 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20  * <ul> .** <li> 
12530 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d  If P3==0 and P4=
12540 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
12550 3a 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45  := r[P1] IS TRUE
12560 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
12570 31 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65  1 and P4==1  the
12580 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
12590 5d 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c  ] IS FALSE.** <l
125a0 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20  i> If P3==0 and 
125b0 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
125c0 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e  2] := r[P1] IS N
125d0 4f 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20  OT TRUE.** <li> 
125e0 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d  If P3==1 and P4=
125f0 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
12600 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20  := r[P1] IS NOT 
12610 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  FALSE.** </ul>.*
12620 2f 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65  /.case OP_IsTrue
12630 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12640 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
12650 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12660 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
12670 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
12680 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70  Op->p4.i==0 || p
12690 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20  Op->p4.i==1 );. 
126a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
126b0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
126c0 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
126d0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
126e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20  Mem[pOp->p2],.  
126f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 42      sqlite3VdbeB
12700 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
12710 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d  m[pOp->p1], pOp-
12720 3e 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69  >p3) ^ pOp->p4.i
12730 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
12740 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
12750 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
12760 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
12770 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
12780 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
12790 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
127a0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
127b0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
127c0 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
127d0 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
127e0 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
127f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12800 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
12810 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
12820 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
12830 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
12840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12850 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
12860 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
12870 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12880 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
12890 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
128a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
128b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
128c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
128d0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
128e0 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 42  t, !sqlite3VdbeB
128f0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31  ooleanValue(pIn1
12900 2c 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ,0));.  }else{. 
12910 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12920 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
12930 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12940 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
12950 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
12960 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
12970 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
12980 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
12990 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
129a0 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
129b0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
129c0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
129d0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
129e0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
129f0 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
12a00 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
12a10 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
12a20 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
12a30 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
12a40 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12a50 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
12a60 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
12a70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12a80 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12a90 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12aa0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12ab0 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12ac0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12ad0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12ae0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12af0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12b00 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12b10 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12b20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12b30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
12b40 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
12b50 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
12b60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
12b70 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66  nstruction the f
12b80 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f  irst time this o
12b90 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f  pcode is.** enco
12ba0 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20  untered on each 
12bb0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
12bc0 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67  e byte-code prog
12bd0 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  ram.  Jump to P2
12be0 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e  .** on the secon
12bf0 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  d and all subseq
12c00 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20  uent encounters 
12c10 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20  during the same 
12c20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  invocation..**.*
12c30 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67  * Top-level prog
12c40 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66  rams determine f
12c50 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20  irst invocation 
12c60 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65  by comparing the
12c70 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61   P1.** operand a
12c80 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70  gainst the P1 op
12c90 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f  erand on the OP_
12ca0 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74  Init opcode at t
12cb0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20  he beginning.** 
12cc0 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
12cd0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
12ce0 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66  s differ, then f
12cf0 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
12d00 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f  make.** the P1 o
12d10 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71  f this opcode eq
12d20 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66  ual to the P1 of
12d30 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31   OP_Init.  If P1
12d40 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74   values are.** t
12d50 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b  he same then tak
12d60 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a  e the jump..**.*
12d70 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d  * For subprogram
12d80 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69  s, there is a bi
12d90 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62  tmask in the Vdb
12da0 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65  eFrame that dete
12db0 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65  rmines.** whethe
12dc0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
12dd0 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  p should be take
12de0 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20  n.  The bitmask 
12df0 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20  is necessary.** 
12e00 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66  because the self
12e10 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74  -altering code t
12e20 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f  rick does not wo
12e30 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  rk for recursive
12e40 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f  .** triggers..*/
12e50 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e70 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41  jump */.  u32 iA
12e80 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ddr;            
12e90 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
12ea0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
12eb0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
12ec0 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65  p->aOp[0].opcode
12ed0 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69  ==OP_Init );.  i
12ee0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
12ef0 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74      iAddr = (int
12f00 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b  )(pOp - p->aOp);
12f10 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72  .    if( (p->pFr
12f20 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
12f30 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72  /8] & (1<<(iAddr
12f40 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20   & 7)))!=0 ){.  
12f50 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12f60 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12f70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12f80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70  ;.    }.    p->p
12f90 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
12fa0 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64  dr/8] |= 1<<(iAd
12fb0 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65  dr & 7);.  }else
12fc0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70  {.    if( p->aOp
12fd0 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
12fe0 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
12ff0 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a  nchTaken(1, 2);.
13000 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
13010 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
13020 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13030 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d  en(0, 2);.  pOp-
13040 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
13050 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
13060 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
13070 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13080 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13090 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
130a0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
130b0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
130c0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
130d0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
130e0 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
130f0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13100 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13110 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13120 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13130 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13150 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20    {             
13160 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
13170 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d  /.  int c;.  c =
13180 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
13190 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
131a0 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33  Op->p1], pOp->p3
131b0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
131c0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
131d0 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
131e0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
131f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13200 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
13210 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13220 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13230 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13240 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
13250 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13260 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
13270 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
13280 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
13290 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
132a0 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
132b0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
132c0 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
132d0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
132e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
132f0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
13300 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13310 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21    int c;.  c = !
13320 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
13330 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
13340 70 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33  p->p1], !pOp->p3
13350 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
13360 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13370 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
13380 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
13390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
133a0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
133b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
133c0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
133d0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
133e0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
133f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13400 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13410 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13420 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13430 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
13440 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
13450 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13460 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
13470 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
13480 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13490 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
134a0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
134b0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
134c0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
134d0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
134e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
134f0 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13500 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13510 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
13520 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13530 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13540 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13550 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
13560 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
13570 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
13580 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
13590 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
135a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
135b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
135c0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
135d0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
135e0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
135f0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
13600 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13610 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
13620 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13630 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
13650 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
13660 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
13670 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
13680 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
13690 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
136a0 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
136b0 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
136c0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
136d0 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
136e0 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
136f0 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
13700 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
13710 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
13720 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
13730 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
13740 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
13750 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
13760 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
13770 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
13780 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
13790 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
137a0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
137b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
137c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
137d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
137e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
137f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  =0 );.  if( p->a
13800 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e  pCsr[pOp->p1]->n
13810 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
13820 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
13830 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  ull(aMem + pOp->
13840 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  p3);.    goto ju
13850 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13860 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
13870 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f   SQLITE_ENABLE_O
13880 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f  FFSET_SQL_FUNC./
13890 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
138a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
138b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
138c0 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74   = sqlite_offset
138d0 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P1).**.** Store
138e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50   in register r[P
138f0 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66 73  3] the byte offs
13900 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
13910 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69  base file that i
13920 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f  s the.** start o
13930 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f  f the payload fo
13940 72 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  r the record at 
13950 77 68 69 63 68 20 74 68 61 74 20 63 75 72 73 6f  which that curso
13960 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  r P1 is currentl
13970 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  y.** pointing..*
13980 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63  *.** P2 is the c
13990 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
139a0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
139b0 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73   the sqlite_offs
139c0 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  et() function..*
139d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
139e0 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74  es not use P2 it
139f0 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32  self, but the P2
13a00 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
13a10 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65  y the.** code ge
13a20 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31  nerator.  The P1
13a30 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65  , P2, and P3 ope
13a40 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70  rands to this op
13a50 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20  code are the.** 
13a60 73 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43  same as for OP_C
13a70 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  olumn..**.** Thi
13a80 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
13a90 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51   available if SQ
13aa0 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
13ab0 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53   with the.** -DS
13ac0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
13ad0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74  SET_SQL_FUNC opt
13ae0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
13af0 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20  Offset: {       
13b00 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20     /* out3 */.  
13b10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
13b20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
13b30 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
13b40 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
13b50 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
13b60 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
13b70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
13b80 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
13b90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
13ba0 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20  f( NEVER(pC==0) 
13bb0 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  || pC->eCurType!
13bc0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
13bd0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
13be0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
13bf0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
13c00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13c10 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c  tInt64(pOut, sql
13c20 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28  ite3BtreeOffset(
13c30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29  pC->uc.pCursor))
13c40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
13c50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
13c60 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13c70 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20  SQL_FUNC */../* 
13c80 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
13c90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
13ca0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
13cb0 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
13cc0 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
13cd0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
13ce0 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
13cf0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
13d00 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
13d10 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
13d20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
13d30 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
13d40 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
13d50 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
13d60 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
13d70 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
13d80 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
13d90 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
13da0 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
13db0 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
13dc0 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
13dd0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
13de0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
13df0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
13e00 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
13e10 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
13e20 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
13e30 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
13e40 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
13e50 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
13e60 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
13e70 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
13e80 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
13e90 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
13ea0 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
13eb0 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
13ec0 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
13ed0 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
13ee0 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
13ef0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
13f00 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
13f10 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
13f20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
13f30 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
13f40 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
13f50 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
13f60 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
13f70 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
13f80 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
13f90 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
13fa0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
13fb0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
13fc0 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
13fd0 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
13fe0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
13ff0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
14000 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
14010 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
14020 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68  on P5 then.** th
14030 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
14040 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
14050 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14060 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
14070 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
14080 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
14090 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
140a0 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
140b0 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
140c0 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
140d0 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
140e0 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
140f0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
14100 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
14110 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
14120 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
14130 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
14140 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
14150 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
14160 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
14170 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
14180 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
14190 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
141a0 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
141b0 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
141c0 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
141d0 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
141e0 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
141f0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
14200 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
14210 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
14220 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
14230 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
14240 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
14250 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
14260 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
14270 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
14280 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
14290 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
142a0 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
142b0 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
142c0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
142d0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
142e0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
142f0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
14300 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
14310 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
14320 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
14330 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
14340 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
14350 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
14360 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
14370 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
14380 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
14390 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
143a0 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20  header */.  u64 
143b0 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
143c0 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
143d0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
143e0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
143f0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
14400 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
14410 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
14420 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
14430 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
14440 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
14450 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
14460 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
14470 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
14480 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
14490 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74  tale (meaning it
144a0 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
144b0 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20  y point at.  ** 
144c0 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29  the correct row)
144d0 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75   then bring it u
144e0 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69  p-to-date by doi
144f0 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  ng the necessary
14500 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65   .  ** B-Tree se
14510 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ek. */.  rc = sq
14520 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
14530 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
14540 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
14550 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14560 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ror;..  assert( 
14570 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
14580 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
14590 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
145a0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
145b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
145c0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
145d0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
145e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
145f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
14600 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
14610 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
14620 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
14630 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
14640 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
14650 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
14660 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
14670 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
14680 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
14690 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
146a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
146b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
146c0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
146d0 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28  SORTER );..  if(
146e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
146f0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14720 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66  F-FALSE*/.    if
14730 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
14740 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65  .      if( pC->e
14750 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
14760 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20  _PSEUDO ){.     
14770 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70     /* For the sp
14780 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73  ecial case of as
14790 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20   pseudo-cursor, 
147a0 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66  the seekResult f
147b0 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  ield.        ** 
147c0 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
147d0 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
147e0 64 73 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  ds the record */
147f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14800 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e   pC->seekResult>
14810 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
14820 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65  g = &aMem[pC->se
14830 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20  ekResult];.     
14840 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
14850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
14860 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
14870 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14880 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
14890 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
148a0 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70   = pC->szRow = p
148b0 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
148c0 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
148d0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
148e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
148f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
14900 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
14910 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14920 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
14930 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14940 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
14950 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61  pCursor;.      a
14960 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14970 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
14980 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
14990 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
149a0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
149b0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
149c0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
149d0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
149e0 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
149f0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
14a00 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
14a10 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
14a20 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
14a30 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52  (pCrsr, &pC->szR
14a40 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ow);.      asser
14a50 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43  t( pC->szRow<=pC
14a60 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b  ->payloadSize );
14a70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14a80 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20  C->szRow<=65536 
14a90 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
14aa0 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
14ab0 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
14ac0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
14ad0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
14ae0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
14af0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
14b00 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
14b10 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14b20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
14b30 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
14b40 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14b50 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
14b60 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73  (pC->aRow, aOffs
14b70 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e  et[0]);.    pC->
14b80 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
14b90 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a  ..    if( pC->sz
14ba0 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  Row<aOffset[0] )
14bb0 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
14bc0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
14bd0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
14be0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
14bf0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
14c00 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
14c10 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
14c20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14c30 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14c40 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14c50 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14c60 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
14c70 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
14c80 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
14c90 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
14ca0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
14cb0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
14cc0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
14cd0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
14ce0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
14cf0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
14d00 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
14d10 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
14d20 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14d30 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14d40 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14d50 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14d60 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
14d70 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
14d80 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
14d90 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
14da0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
14db0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
14dc0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
14dd0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
14de0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
14df0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
14e00 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
14e10 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
14e20 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14e30 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14e40 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14e50 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14e60 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
14e70 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
14e80 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
14e90 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
14ea0 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
14eb0 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
14ec0 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
14ed0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
14ee0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
14ef0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
14f00 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
14f10 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66  */.      if( aOf
14f20 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20  fset[0] > 98307 
14f30 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  || aOffset[0] > 
14f40 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
14f50 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14f60 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
14f70 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
14f80 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54  else{.      /* T
14f90 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
14fa0 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70  zation.  By skip
14fb0 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69  ping over the fi
14fc0 72 73 74 20 66 65 77 20 74 65 73 74 73 0a 20 20  rst few tests.  
14fd0 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e      ** (ex: pC->
14fe0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20  nHdrParsed<=p2) 
14ff0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 63 74  in the next sect
15000 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20  ion, we achieve 
15010 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75  a.      ** measu
15020 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63  rable performanc
15030 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a  e gain..      **
15040 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62  .      ** This b
15050 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65  ranch is taken e
15060 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30  ven if aOffset[0
15070 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65  ]==0.  Such a re
15080 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20  cord is never.  
15090 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64      ** generated
150a0 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   by SQLite, and 
150b0 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  could be conside
150c0 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20  red corruption, 
150d0 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20  but we.      ** 
150e0 61 63 63 65 70 74 20 69 74 20 66 6f 72 20 68 69  accept it for hi
150f0 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
15100 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b  .  When aOffset[
15110 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20  0]==0, the code 
15120 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72  this.      ** br
15130 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65  anch jumps to re
15140 61 64 73 20 70 61 73 74 20 74 68 65 20 65 6e 64  ads past the end
15150 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
15160 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20  but never more. 
15170 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66       ** than a f
15180 65 77 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20  ew bytes.  Even 
15190 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63  if the record oc
151a0 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
151b0 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20  of the page.    
151c0 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65    ** content are
151d0 61 2c 20 74 68 65 20 22 70 61 67 65 20 68 65 61  a, the "page hea
151e0 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72  der" comes after
151f0 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e   the page conten
15200 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a  t and so.      *
15210 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61 64 20  * this overread 
15220 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69  is harmless.  Si
15230 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20  milar overreads 
15240 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20  can occur for a 
15250 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a  corrupt.      **
15260 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
15270 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
15280 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
15290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
152a0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
152b0 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
152c0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
152d0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73  ped */.      tes
152e0 74 63 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30  tcase( aOffset[0
152f0 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  ]==0 );.      go
15300 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
15310 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a  d_header;.    }.
15320 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
15330 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
15340 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
15350 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
15360 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
15370 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
15380 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
15390 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
153a0 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
153b0 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
153c0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
153d0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
153e0 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
153f0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
15400 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
15410 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
15420 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
15430 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
15440 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
15450 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
15460 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
15470 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
15480 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
15490 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
154a0 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
154b0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
154c0 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
154d0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
154e0 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
154f0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
15500 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
15510 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
15520 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
15530 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e  emFromBtree(pC->
15540 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61  uc.pCursor, 0, a
15550 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d  Offset[0], &sMem
15560 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
15570 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
15580 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15590 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
155a0 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
155b0 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
155c0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
155d0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
155e0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
155f0 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
15600 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
15610 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
15620 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
15630 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f  ld. */.    op_co
15640 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
15650 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  :.      i = pC->
15660 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
15670 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66    offset64 = aOf
15680 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
15690 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
156a0 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
156b0 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
156c0 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
156d0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
156e0 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20  ( zHdr>=zEndHdr 
156f0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
15700 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48       if( (t = zH
15710 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20  dr[0])<0x80 ){. 
15720 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
15730 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
15740 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
15750 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
15760 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
15770 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15780 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
15790 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
157a0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
157b0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
157c0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
157d0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
157e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
157f0 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20  C->aType[i++] = 
15800 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  t;.        aOffs
15810 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66  et[i] = (u32)(of
15820 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66 66  fset64 & 0xfffff
15830 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69  fff);.      }whi
15840 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
15850 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20  r<zEndHdr );..  
15860 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
15870 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
15880 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
15890 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
158a0 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
158b0 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
158c0 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
158d0 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
158e0 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
158f0 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
15900 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
15910 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
15920 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
15930 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
15940 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
15950 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
15960 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
15970 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15980 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
15990 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
159a0 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
159b0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
159c0 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
159d0 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
159e0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
159f0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
15a00 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b  aOffset[0]==0 ){
15a10 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d 20 30  .          i = 0
15a20 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
15a30 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20   = zEndHdr;.    
15a40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15a50 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
15a60 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
15a70 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
15a80 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  em);.          g
15a90 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  oto op_column_co
15aa0 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d  rrupt;.        }
15ab0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
15ac0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
15ad0 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
15ae0 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
15af0 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
15b00 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
15b10 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
15b20 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
15b30 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Mem);.    }else{
15b40 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20  .      t = 0;.  
15b50 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
15b60 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
15b70 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69  xtract new entri
15b80 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64  es from the head
15b90 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69  er, nHdrParsed i
15ba0 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e  s.    ** still n
15bb0 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61  ot up to p2, tha
15bc0 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
15bd0 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65   record has fewe
15be0 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a  r than p2.    **
15bf0 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68   columns.  So th
15c00 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
15c10 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61   either the defa
15c20 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e  ult value or a N
15c30 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
15c40 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15c50 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20  ed<=p2 ){.      
15c60 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
15c70 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P4_MEM ){.     
15c80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15c90 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
15ca0 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
15cb0 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
15cc0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15cd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15ce0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
15cf0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
15d00 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
15d10 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ut;.    }.  }els
15d20 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61  e{.    t = pC->a
15d30 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20  Type[p2];.  }.. 
15d40 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
15d50 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
15d60 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20  p2+1-th column. 
15d70 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c   Control can onl
15d80 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69  y.  ** reach thi
15d90 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73  s point if aOffs
15da0 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b  et[p2], aOffset[
15db0 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61  p2+1], and pC->a
15dc0 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a  Type[p2] are.  *
15dd0 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a  * all valid..  *
15de0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  /.  assert( p2<p
15df0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b  C->nHdrParsed );
15e00 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
15e10 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73  QLITE_OK );.  as
15e20 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
15e30 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
15e40 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20  nts(pDest) );.  
15e50 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
15e60 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ic(pDest) ){.   
15e70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15e80 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
15e90 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d   }.  assert( t==
15ea0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b  pC->aType[p2] );
15eb0 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77  .  if( pC->szRow
15ec0 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20  >=aOffset[p2+1] 
15ed0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  ){.    /* This i
15ee0 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  s the common cas
15ef0 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69  e where the desi
15f00 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73  red content fits
15f10 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   on the original
15f20 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77  .    ** page - w
15f30 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  here the content
15f40 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76   is not on an ov
15f50 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20  erflow page */. 
15f60 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15f70 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32  Row + aOffset[p2
15f80 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20  ];.    if( t<12 
15f90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15fa0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44  VdbeSerialGet(zD
15fb0 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ata, t, pDest);.
15fc0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15fd0 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d   /* If the colum
15fe0 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  n value is a str
15ff0 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70  ing, we need a p
16000 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c  ersistent value,
16010 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20   not.      ** a 
16020 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e  MEM_Ephem value.
16030 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73    This branch is
16040 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75   a fast short-cu
16050 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76 61  t that is equiva
16060 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f  lent.      ** to
16070 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
16080 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20  VdbeSerialGet() 
16090 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 44  and sqlite3VdbeD
160a0 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e  eephemeralize().
160b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
160c0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36  static const u16
160d0 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d   aFlag[] = { MEM
160e0 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d  _Blob, MEM_Str|M
160f0 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20  EM_Term };.     
16100 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20   pDest->n = len 
16110 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20  = (t-12)/2;.    
16120 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
16130 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69  ncoding;.      i
16140 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c  f( pDest->szMall
16150 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20  oc < len+2 ){.  
16160 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
16170 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
16180 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
16190 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44  e3VdbeMemGrow(pD
161a0 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29  est, len+2, 0) )
161b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
161c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
161d0 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44     pDest->z = pD
161e0 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  est->zMalloc;.  
161f0 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
16200 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61  py(pDest->z, zDa
16210 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20  ta, len);.      
16220 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
16230 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
16240 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20  z[len+1] = 0;.  
16250 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16260 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20   = aFlag[t&1];. 
16270 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16280 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
16290 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20  ncoding;.    /* 
162a0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
162b0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
162c0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
162d0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
162e0 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
162f0 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
16300 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
16310 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
16320 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
16330 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
16340 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
16350 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
16360 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
16370 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16380 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
16390 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
163a0 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
163b0 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
163c0 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
163d0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
163e0 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
163f0 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
16400 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
16410 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
16420 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
16430 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
16440 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
16450 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
16460 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
16470 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
16480 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
16490 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
164a0 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a   disk. .      **
164b0 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75  .      ** Althou
164c0 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  gh sqlite3VdbeSe
164d0 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65  rialGet() may re
164e0 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74  ad at most 8 byt
164f0 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  es from the.    
16500 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73    ** buffer pass
16510 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67  ed to it, debugg
16520 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62  ing function Vdb
16530 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
16540 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72  ) may.      ** r
16550 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f  ead up to 16. So
16560 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67   16 bytes of bog
16570 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75  us content is su
16580 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f  pplied..      */
16590 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
165a0 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20   aZero[16];  /* 
165b0 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75  This is the bogu
165c0 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20  s content */.   
165d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
165e0 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74  rialGet(aZero, t
165f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
16600 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
16610 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
16620 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70  omBtree(pC->uc.p
16630 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b  Cursor, aOffset[
16640 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29  p2], len, pDest)
16650 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
16660 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
16670 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16680 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ror;.      sqlit
16690 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
166a0 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
166b0 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ->z, t, pDest);.
166c0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
166d0 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d  gs &= ~MEM_Ephem
166e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f  ;.    }.  }..op_
166f0 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
16700 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
16710 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
16720 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
16730 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
16740 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  eak;..op_column_
16750 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61  corrupt:.  if( a
16760 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20  Op[0].p3>0 ){.  
16770 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70    pOp = &aOp[aOp
16780 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62  [0].p3-1];.    b
16790 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  reak;.  }else{. 
167a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
167b0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
167c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
167d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a  to_error;.  }.}.
167e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
167f0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
16800 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
16810 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
16820 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
16830 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
16840 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
16850 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
16860 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
16870 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
16880 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
16890 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20   long. The N-th 
168a0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
168b0 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
168c0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
168d0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
168e0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
168f0 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d   the N-th.** mem
16900 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
16910 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
16920 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
16930 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
16940 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
16950 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
16960 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66  pplied */..  zAf
16970 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
16980 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
16990 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
169a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
169b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
169c0 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
169d0 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
169e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
169f0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16a00 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
16a10 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
16a20 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
16a30 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
16a40 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
16a50 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
16a60 74 79 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69  ty(pIn1, *(zAffi
16a70 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
16a80 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
16a90 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
16aa0 69 74 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61  ity[0] );.  brea
16ab0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16ac0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
16ad0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
16ae0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
16af0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
16b00 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
16b10 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
16b20 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
16b30 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
16b40 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
16b50 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
16b60 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
16b70 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
16b80 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
16b90 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
16ba0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
16bb0 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
16bc0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
16bd0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
16be0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
16bf0 67 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61  g.  The N-th cha
16c00 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
16c10 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
16c20 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
16c30 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
16c40 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
16c50 65 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20  e N-th.** field 
16c60 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
16c70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70  ..**.** The mapp
16c80 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74  ing from charact
16c90 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69  er to affinity i
16ca0 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53  s given by the S
16cb0 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61  QLITE_AFF_.** ma
16cc0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20  cros defined in 
16cd0 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a  sqliteInt.h..**.
16ce0 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c  ** If P4 is NULL
16cf0 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20   then all index 
16d00 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20  fields have the 
16d10 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a  affinity BLOB..*
16d20 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65  /.case OP_MakeRe
16d30 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e  cord: {.  u8 *zN
16d40 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20  ewRecord;       
16d50 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20   /* A buffer to 
16d60 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f  hold the data fo
16d70 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
16d80 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b   */.  Mem *pRec;
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16da0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
16db0 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
16dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16dd0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
16de0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
16df0 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
16e00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e10 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
16e20 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
16e30 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
16e40 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
16e50 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
16e60 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
16e70 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20  .  i64 nZero;   
16e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16e90 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
16ea0 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
16eb0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16ec0 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
16ed0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16ee0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
16ef0 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
16f00 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
16f10 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
16f20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
16f30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
16f40 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
16f50 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
16f60 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
16f70 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
16f80 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
16f90 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
16fa0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
16fb0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
16fc0 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
16fd0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
16fe0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
16ff0 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
17000 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
17010 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
17020 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
17030 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
17040 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
17050 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
17060 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17080 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
17090 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65  ewRecord[] heade
170a0 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20  r */.  int j;   
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
170c0 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
170d0 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74  NewRecord[] cont
170e0 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e  ent */.  u32 len
170f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17100 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
17110 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73  ield */..  /* As
17120 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
17130 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
17140 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
17150 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
17160 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
17170 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
17180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
171c0 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
171d0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
171e0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
171f0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
17200 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
17210 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
17220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
17260 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
17270 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
17280 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
17290 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
172a0 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
172b0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20   and so forth.. 
172c0 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
172d0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
172e0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
172f0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
17300 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
17310 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
17320 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
17330 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
17340 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
17350 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
17360 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
17370 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
17380 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
17390 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
173a0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
173b0 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61  ata0..  */.  nDa
173c0 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
173d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
173e0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
173f0 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20   */.  nHdr = 0; 
17400 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17410 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
17420 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
17430 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
17440 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17450 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
17460 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
17470 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
17480 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
17490 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
174a0 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
174b0 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
174c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
174d0 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d  nField<=(p->nMem
174e0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
174f0 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
17500 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
17510 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
17520 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
17530 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
17540 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
17550 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
17560 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
17570 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
17580 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
17590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
175a0 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
175b0 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
175c0 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
175d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
175e0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
175f0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
17600 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71  /* Apply the req
17610 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20  uested affinity 
17620 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  to all inputs.  
17630 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  */.  assert( pDa
17640 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
17650 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
17660 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74  .    pRec = pDat
17670 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20  a0;.    do{.    
17680 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
17690 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e  pRec++, *(zAffin
176a0 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67  ity++), encoding
176b0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
176c0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30   zAffinity[0]==0
176d0 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20   || pRec<=pLast 
176e0 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a  );.    }while( z
176f0 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20  Affinity[0] );. 
17700 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
17710 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
17720 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61  IM.  /* NULLs ca
17730 6e 20 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d  n be safely trim
17740 6d 65 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  med from the end
17750 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
17760 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20  as long as.  ** 
17770 61 73 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  as the schema fo
17780 72 6d 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72  rmat is 2 or mor
17790 65 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68  e and none of th
177a0 65 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e  e omitted column
177b0 73 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f  s.  ** have a no
177c0 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76  n-NULL default v
177d0 61 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65  alue.  Also, the
177e0 20 72 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20   record must be 
177f0 6c 65 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61  left with.  ** a
17800 74 20 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c  t least one fiel
17810 64 2e 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e  d.  If P5>0 then
17820 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20   it will be one 
17830 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20  more than the.  
17840 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
17850 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d  right-most colum
17860 6e 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c  n with a non-NUL
17870 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  L default value 
17880 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
17890 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   ){.    while( (
178a0 70 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d  pLast->flags & M
178b0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e  EM_Null)!=0 && n
178c0 46 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b  Field>pOp->p5 ){
178d0 0a 20 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a  .      pLast--;.
178e0 20 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a        nField--;.
178f0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
17900 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
17910 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
17920 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
17930 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
17940 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
17950 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
17960 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
17970 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
17980 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
17990 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
179a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
179b0 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73  d(pRec) );.    s
179c0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
179d0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
179e0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
179f0 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20  rmat, &len);.   
17a00 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
17a10 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
17a20 20 20 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f       if( serial_
17a30 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  type==0 ){.     
17a40 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74     /* Values wit
17a50 68 20 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d  h MEM_Null and M
17a60 45 4d 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61  EM_Zero are crea
17a70 74 65 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76  ted by xColumn v
17a80 69 72 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a  irtual.        *
17a90 2a 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  * table methods 
17aa0 74 68 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b  that never invok
17ab0 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  e sqlite3_result
17ac0 5f 78 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20  _xxxxx() while. 
17ad0 20 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74         ** comput
17ae0 69 6e 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e  ing an unchangin
17af0 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  g column value i
17b00 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
17b10 65 6d 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a  ement..        *
17b20 2a 20 47 69 76 65 20 73 75 63 68 20 76 61 6c 75  * Give such valu
17b30 65 73 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74  es a special int
17b40 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73  ernal-use-only s
17b50 65 72 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30  erial-type of 10
17b60 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74  .        ** so t
17b70 68 61 74 20 74 68 65 79 20 63 61 6e 20 62 65 20  hat they can be 
17b80 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 20 74  passed through t
17b90 6f 20 78 55 70 64 61 74 65 20 61 6e 64 20 68 61  o xUpdate and ha
17ba0 76 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20  ve.        ** a 
17bb0 74 72 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c  true sqlite3_val
17bc0 75 65 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a  ue_nochange(). *
17bd0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
17be0 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  ( pOp->p5==OPFLA
17bf0 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c  G_NOCHNG_MAGIC |
17c00 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
17c10 20 20 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74          serial_t
17c20 79 70 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20  ype = 10;.      
17c30 7d 65 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20  }else if( nData 
17c40 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
17c50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
17c60 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20  andBlob(pRec) ) 
17c70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
17c80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17c90 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d    nZero += pRec-
17ca0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
17cb0 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75    len -= pRec->u
17cc0 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a  .nZero;.      }.
17cd0 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20      }.    nData 
17ce0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74  += len;.    test
17cf0 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
17d00 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65  e==127 );.    te
17d10 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
17d20 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20  ype==128 );.    
17d30 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74  nHdr += serial_t
17d40 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73  ype<=127 ? 1 : s
17d50 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
17d60 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
17d70 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
17d80 73 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20  serial_type;.   
17d90 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61   if( pRec==pData
17da0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
17db0 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28  Rec--;.  }while(
17dc0 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e  1);..  /* EVIDEN
17dd0 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31  CE-OF: R-22564-1
17de0 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20  1647 The header 
17df0 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69  begins with a si
17e00 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  ngle varint.  **
17e10 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65   which determine
17e20 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
17e30 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
17e40 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76  he header. The v
17e50 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65  arint.  ** value
17e60 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
17e70 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79  the header in by
17e80 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
17e90 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20  e size varint.  
17ea0 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20  ** itself. */.  
17eb0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
17ec0 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73  126 );.  testcas
17ed0 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a  e( nHdr==127 );.
17ee0 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20    if( nHdr<=126 
17ef0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f  ){.    /* The co
17f00 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20  mmon case */.   
17f10 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65   nHdr += 1;.  }e
17f20 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65  lse{.    /* Rare
17f30 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c   case of a reall
17f40 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a  y large header *
17f50 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20  /.    nVarint = 
17f60 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17f70 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72  (nHdr);.    nHdr
17f80 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20   += nVarint;.   
17f90 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
17fa0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
17fb0 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20  dr) ) nHdr++;.  
17fc0 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
17fd0 2b 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61  +nData;..  /* Ma
17fe0 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
17ff0 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
18000 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
18010 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
18020 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
18030 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
18040 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
18050 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
18060 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
18070 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
18080 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
18090 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
180a0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
180b0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
180c0 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64  ndResize() could
180d0 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
180e0 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
180f0 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
18100 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70  ( nByte+nZero<=p
18110 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b  Out->szMalloc ){
18120 0a 20 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  .    /* The outp
18130 75 74 20 72 65 67 69 73 74 65 72 20 69 73 20 61  ut register is a
18140 6c 72 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f  lready large eno
18150 75 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ugh to hold the 
18160 72 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e  record..    ** N
18170 6f 20 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f  o error checks o
18180 72 20 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65  r buffer enlarge
18190 6d 65 6e 74 20 69 73 20 72 65 71 75 69 72 65 64  ment is required
181a0 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20   */.    pOut->z 
181b0 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
181c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
181d0 20 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   Need to make su
181e0 72 65 20 74 68 61 74 20 74 68 65 20 6f 75 74 70  re that the outp
181f0 75 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69  ut is not too bi
18200 67 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72  g and then enlar
18210 67 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75  ge.    ** the ou
18220 74 70 75 74 20 72 65 67 69 73 74 65 72 20 74 6f  tput register to
18230 20 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72   hold the full r
18240 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28  esult */.    if(
18250 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
18260 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
18270 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
18280 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
18290 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ig;.    }.    if
182a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
182b0 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
182c0 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  Out, (int)nByte)
182d0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
182e0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_mem;.    }.  }
182f0 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
18300 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
18310 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
18320 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
18330 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
18340 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
18350 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
18360 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
18370 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
18380 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
18390 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52  serial_type = pR
183a0 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f  ec->uTemp;.    /
183b0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
183c0 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c  -06529-47362 Fol
183d0 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
183e0 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f  varint are one o
183f0 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64  r more.    ** ad
18400 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
18410 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e  , one per column
18420 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75  . */.    i += pu
18430 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
18440 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
18450 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20  _type);         
18460 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
18470 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44  e */.    /* EVID
18480 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36  ENCE-OF: R-64536
18490 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65  -51728 The value
184a0 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  s for each colum
184b0 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  n in the record.
184c0 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
184d0 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65  ly follow the he
184e0 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b  ader. */.    j +
184f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
18500 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
18510 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72  rd[j], pRec, ser
18520 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
18530 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
18540 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
18550 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
18560 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73  i==nHdr );.  ass
18570 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b  ert( j==nByte );
18580 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
18590 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
185a0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
185b0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
185c0 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
185d0 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
185e0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
185f0 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
18600 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
18610 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
18620 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
18630 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47  _Zero;.  }.  REG
18640 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
18650 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
18660 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
18670 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
18680 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18690 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
186a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
186b0 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a  [P2]=count().**.
186c0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
186d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
186e0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
186f0 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
18700 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
18710 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
18720 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
18730 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18740 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
18750 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
18760 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
18770 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  2 */.  i64 nEntr
18780 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
18790 43 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  Crsr;..  assert(
187a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
187b0 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  1]->eCurType==CU
187c0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
187d0 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
187e0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70  r[pOp->p1]->uc.p
187f0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
18800 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e  ( pCrsr );.  nEn
18810 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  try = 0;  /* Not
18820 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
18830 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
18840 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
18850 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18860 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45  Count(pCrsr, &nE
18870 6e 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20  ntry);.  if( rc 
18880 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18890 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
188a0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
188b0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
188c0 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
188d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
188e0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
188f0 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
18900 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
18910 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
18920 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
18930 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
18940 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
18950 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
18960 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
18970 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
18980 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
18990 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
189a0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
189b0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
189c0 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
189d0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
189e0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
189f0 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
18a00 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
18a30 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
18a40 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
18a70 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
18a80 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
18a90 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
18aa0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
18ab0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
18ac0 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
18ad0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
18ae0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
18af0 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
18b00 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
18b10 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
18b20 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
18b30 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
18b40 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
18b50 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
18b60 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
18b70 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
18b80 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
18b90 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
18ba0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
18bb0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
18bc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
18bd0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
18be0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
18bf0 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
18c00 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
18c10 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
18c20 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
18c30 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18c40 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
18c50 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
18c60 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
18c70 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
18c80 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18c90 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
18ca0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
18cb0 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
18cc0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
18cd0 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
18ce0 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
18cf0 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
18d00 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
18d10 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
18d20 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
18d30 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
18d40 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
18d50 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
18d60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
18d70 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
18d80 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
18d90 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
18da0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
18db0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
18dc0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
18dd0 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
18de0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
18df0 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65  (zName);..#ifnde
18e00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18e10 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
18e20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73   /* This call is
18e30 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73   Ok even if this
18e40 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63   savepoint is ac
18e50 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63  tually a transac
18e60 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61  tion.      ** sa
18e70 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65  vepoint (and the
18e80 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f  refore should no
18e90 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f  t prompt xSavepo
18ea0 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73  int()) callbacks
18eb0 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  ..      ** If th
18ec0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
18ed0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65  ion savepoint be
18ee0 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69  ing opened, it i
18ef0 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20  s guaranteed.   
18f00 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64     ** that the d
18f10 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72  b->aVTrans[] arr
18f20 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f  ay is empty.  */
18f30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
18f40 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
18f50 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d   || db->nVTrans=
18f60 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  =0 );.      rc =
18f70 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18f80 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
18f90 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20  INT_BEGIN,.     
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e             db->n
18fc0 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53  Statement+db->nS
18fd0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18fe0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18ff0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
19000 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
19010 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43  ndif..      /* C
19020 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
19030 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
19040 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
19050 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
19060 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66  RawNN(db, sizeof
19070 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
19080 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
19090 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
190a0 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
190b0 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
190c0 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
190d0 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
190e0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
190f0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
19100 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
19110 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
19120 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
19130 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
19140 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
19150 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
19160 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
19170 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
19180 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
19190 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
191a0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
191b0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
191c0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
191d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
191e0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
191f0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
19200 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
19210 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
19220 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
19230 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
19240 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
19250 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
19260 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
19270 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
19280 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
19290 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
192a0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
192b0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
192c0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
192d0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
192e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
192f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19300 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
19310 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
19320 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
19330 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
19340 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
19350 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
19360 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
19370 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
19380 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
19390 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
193a0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
193b0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
193c0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
193d0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
193e0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
193f0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
19400 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
19410 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
19420 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
19430 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
19440 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
19450 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
19460 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
19470 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  p, "no such save
19480 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
19490 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
194a0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
194b0 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e   }else if( db->n
194c0 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70  VdbeWrite>0 && p
194d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
194e0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
194f0 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
19500 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
19510 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
19520 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
19530 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
19540 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
19550 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
19560 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
19570 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72  ror(p, "cannot r
19580 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
19590 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
195b0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
195c0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
195d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
195e0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
195f0 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
19600 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
19610 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
19620 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
19630 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
19640 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
19650 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
19660 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
19670 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
19680 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
19690 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
196a0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
196b0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
196c0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
196d0 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
196e0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
196f0 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
19700 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
19710 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19720 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
19730 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
19740 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
19750 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19760 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
19770 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
19780 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
19790 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
197a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
197b0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
197c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
197d0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
197e0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
197f0 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  p);.          db
19800 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
19810 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
19820 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
19830 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
19840 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
19850 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19860 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19870 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19880 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
19890 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
198a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
198b0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b   isSchemaChange;
198c0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
198d0 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
198e0 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
198f0 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
19900 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
19910 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
19920 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
19930 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62  hange = (db->mDb
19940 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53  Flags & DBFLAG_S
19950 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b  chemaChange)!=0;
19960 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
19970 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
19980 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
19990 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
199a0 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
199b0 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
199c0 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
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 20 20 20 20 53 51 4c 49              SQLI
199f0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
19a00 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K,.             
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
19a30 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20  maChange==0);.  
19a40 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
19a50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19a60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19a70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
19a80 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
19a90 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
19aa0 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a  hemaChange = 0;.
19ab0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19ac0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
19ad0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
19ae0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
19af0 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
19b00 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
19b10 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
19b20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
19b30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19b40 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
19b50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19b60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19b70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
19b80 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63          if( isSc
19b90 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20  hemaChange ){.  
19ba0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
19bb0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
19bc0 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a  tements(db, 0);.
19bd0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19be0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
19bf0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
19c00 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19c10 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
19c20 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
19c30 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19c40 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
19c50 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
19c60 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
19c70 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
19c80 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
19c90 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
19ca0 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
19cb0 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
19cc0 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
19cd0 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
19ce0 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
19cf0 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
19d00 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
19d10 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
19d20 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
19d30 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
19d40 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
19d50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
19d60 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
19d70 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
19d80 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
19d90 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
19da0 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
19db0 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
19dc0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
19dd0 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
19de0 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
19df0 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
19e00 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
19e10 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
19e20 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
19e30 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
19e40 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
19e50 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
19e60 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
19e70 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
19e80 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
19e90 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
19ea0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
19eb0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
19ec0 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
19ed0 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
19ee0 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
19ef0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
19f00 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
19f10 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
19f20 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19f30 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
19f40 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
19f50 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
19f60 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
19f70 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
19f80 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
19f90 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
19fa0 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
19fb0 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
19fc0 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
19fd0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
19fe0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
19ff0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1a000 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1a010 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
1a020 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  on || p1==SAVEPO
1a030 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
1a040 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a050 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
1a060 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
1a070 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
1a080 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a090 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a0a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a0b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1a0c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1a0d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a0e0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
1a0f0 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
1a100 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
1a110 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
1a120 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
1a130 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
1a140 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
1a150 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
1a160 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
1a170 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
1a180 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
1a190 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
1a1a0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
1a1b0 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
1a1c0 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
1a1d0 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
1a1e0 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
1a1f0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
1a200 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
1a210 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
1a220 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
1a230 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
1a240 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
1a250 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
1a260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
1a270 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
1a280 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1a290 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
1a2a0 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  ck;..  desiredAu
1a2b0 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
1a2c0 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
1a2d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
1a2e0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a2f0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
1a300 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1a310 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1a320 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a330 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
1a340 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a350 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
1a360 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
1a370 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
1a380 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
1a390 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a3a0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73  er );..  if( des
1a3b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
1a3c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
1a3d0 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
1a3e0 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
1a3f0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a400 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
1a410 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
1a420 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
1a430 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
1a440 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
1a450 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
1a460 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
1a470 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64  dAutoCommit && d
1a480 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
1a490 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
1a4a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a4b0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
1a4c0 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
1a4d0 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
1a4e0 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
1a4f0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
1a500 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
1a510 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
1a520 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20  te first. .     
1a530 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
1a540 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
1a550 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
1a560 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
1a590 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
1a5a0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
1a5b0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
1a5c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a5d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a5e0 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
1a5f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
1a600 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
1a610 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1a620 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1a630 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1a640 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1a650 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
1a660 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a  toCommit;.    }.
1a670 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
1a680 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
1a690 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1a6a0 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1a6b0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1a6c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a6d0 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
1a6e0 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
1a6f0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
1a700 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
1a710 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1a720 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  urn;.    }.    a
1a730 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
1a740 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
1a750 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
1a760 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
1a770 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
1a780 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1a790 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
1a7a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1a7b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1a7c0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
1a7d0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1a7e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
1a7f0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
1a800 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
1a810 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
1a820 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
1a830 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
1a840 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
1a850 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
1a860 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
1a870 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
1a880 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
1a890 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
1a8a0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
1a8b0 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
1a8c0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
1a8d0 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
1a8e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1a8f0 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RROR;.    goto a
1a900 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a910 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  r;.  }.  break;.
1a920 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
1a930 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
1a940 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
1a950 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
1a960 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50  on on database P
1a970 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69  1 if a transacti
1a980 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  on is not alread
1a990 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20  y.** active..** 
1a9a0 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
1a9b0 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
1a9c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
1a9d0 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20  tarted, or if a 
1a9e0 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63  .** read-transac
1a9f0 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
1aa00 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70  active, it is up
1aa10 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74  graded to a writ
1aa20 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  e-transaction..*
1aa30 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
1aa40 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61   then a read-tra
1aa50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1aa60 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ted..**.** P1 is
1aa70 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
1aa80 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1aa90 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
1aaa0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
1aab0 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
1aac0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1aad0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
1aae0 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
1aaf0 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
1ab00 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1ab10 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
1ab20 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
1ab30 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
1ab40 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
1ab50 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
1ab60 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
1ab70 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
1ab80 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
1ab90 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
1aba0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
1abb0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
1abc0 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
1abd0 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
1abe0 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
1abf0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
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 6d 61 79 20 61 6c 73  nsaction may als
1ac20 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
1ac30 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
1ac40 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
1ac50 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
1ac60 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
1ac70 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
1ac80 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
1ac90 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
1aca0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
1acb0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
1acc0 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
1acd0 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
1ace0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
1acf0 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
1ad00 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
1ad10 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
1ad20 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
1ad30 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
1ad40 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
1ad50 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
1ad60 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
1ad70 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
1ad80 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
1ad90 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1ada0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
1adb0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
1adc0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
1add0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  lts..**.** If P5
1ade0 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
1adf0 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73  code also checks
1ae00 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1ae10 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a  ie against P3.**
1ae20 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20   and the schema 
1ae30 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
1ae40 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a  er against P4..*
1ae50 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61  * The cookie cha
1ae60 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77  nges its value w
1ae70 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
1ae80 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
1ae90 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ges..** This ope
1aea0 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ration is used t
1aeb0 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68  o detect when th
1aec0 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61  at the cookie ha
1aed0 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64  s changed.** and
1aee0 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e   that the curren
1aef0 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20  t process needs 
1af00 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63  to reread the sc
1af10 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63  hema.  If the sc
1af20 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69  hema.** cookie i
1af30 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f  n P3 differs fro
1af40 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  m the schema coo
1af50 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  kie in the datab
1af60 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a  ase header or.**
1af70 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67   if the schema g
1af80 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1af90 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20  r in P4 differs 
1afa0 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
1afb0 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
1afc0 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20  ounter, then an 
1afd0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
1afe0 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e  ror is raised an
1aff0 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68  d execution.** h
1b000 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74  alts.  The sqlit
1b010 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65  e3_step() wrappe
1b020 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74  r function might
1b030 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20   then reprepare 
1b040 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
1b050 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72   and rerun it fr
1b060 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1b070 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
1b080 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
1b090 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20  ree *pBt;.  int 
1b0a0 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73  iMeta = 0;..  as
1b0b0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1b0c0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1b0d0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
1b0e0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
1b0f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b110 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b120 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b130 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b140 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20  p->p1) );.  if( 
1b150 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e  pOp->p2 && (db->
1b160 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51  flags & SQLITE_Q
1b170 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a  ueryOnly)!=0 ){.
1b180 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b190 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f  READONLY;.    go
1b1a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b1b0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74  error;.  }.  pBt
1b1c0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
1b1d0 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
1b1e0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
1b1f0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b200 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
1b210 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20  >p2, &iMeta);.  
1b220 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
1b230 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50  SQLITE_BUSY_SNAP
1b240 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74  SHOT );.    test
1b250 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1b260 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29  _BUSY_RECOVERY )
1b270 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1b280 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b290 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
1b2a0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
1b2b0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
1b2c0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
1b2d0 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
1b2e0 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74   rc;.        got
1b2f0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1b300 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
1b310 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b320 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
1b330 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
1b340 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
1b350 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
1b360 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
1b370 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
1b380 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
1b390 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1b3a0 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
1b3b0 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
1b3c0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
1b3d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
1b3e0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1b3f0 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
1b400 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
1b410 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
1b420 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
1b430 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
1b440 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
1b450 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
1b460 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
1b470 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
1b480 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
1b490 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
1b4a0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
1b4b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
1b4c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b4d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b4e0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
1b4f0 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
1b500 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
1b510 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
1b520 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
1b530 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1b540 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
1b550 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
1b560 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
1b570 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1b580 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
1b590 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
1b5a0 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
1b5b0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1b5c0 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
1b5d0 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
1b5e0 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
1b5f0 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
1b600 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
1b610 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
1b620 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
1b630 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1b640 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1b650 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1b660 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1b670 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1b680 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20  ( pOp->p5.   && 
1b690 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a  (iMeta!=pOp->p3.
1b6a0 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62        || db->aDb
1b6b0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
1b6c0 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d  a->iGeneration!=
1b6d0 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a  pOp->p4.i).  ){.
1b6e0 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d      /*.    ** IM
1b6f0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1b700 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41   R-03189-51135 A
1b710 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  s each SQL state
1b720 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73  ment runs, the s
1b730 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72  chema.    ** ver
1b740 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20  sion is checked 
1b750 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
1b760 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f  he schema has no
1b770 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20  t changed since 
1b780 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73  the.    ** SQL s
1b790 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
1b7a0 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  pared..    */.  
1b7b0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1b7c0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
1b7d0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
1b7e0 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
1b7f0 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
1b800 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
1b810 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
1b820 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
1b830 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
1b840 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
1b850 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
1b860 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
1b870 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
1b880 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1b890 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
1b8a0 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
1b8b0 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1b8c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1b8d0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
1b8e0 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
1b8f0 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
1b900 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
1b910 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
1b920 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
1b930 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
1b940 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
1b950 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
1b960 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
1b970 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
1b980 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
1b990 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
1b9a0 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
1b9b0 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
1b9c0 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
1b9d0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
1b9e0 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
1b9f0 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
1ba00 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
1ba10 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
1ba20 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
1ba30 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
1ba40 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
1ba50 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
1ba60 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
1ba70 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
1ba80 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
1ba90 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
1baa0 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
1bab0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
1bac0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
1bad0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
1bae0 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
1baf0 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
1bb00 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1bb10 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1bb20 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
1bb30 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1bb40 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
1bb50 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
1bb60 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
1bb70 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
1bb80 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
1bb90 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1bba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1bbb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1bbc0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
1bbd0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1bbe0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
1bbf0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
1bc00 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
1bc10 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
1bc20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1bc30 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
1bc40 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
1bc50 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1bc60 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1bc70 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
1bc80 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1bc90 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
1bca0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1bcb0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
1bcc0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1bcd0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
1bce0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1bcf0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
1bd00 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1bd10 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
1bd20 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
1bd30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
1bd40 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
1bd50 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
1bd60 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
1bd70 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
1bd80 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
1bd90 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
1bda0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1bdb0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
1bdc0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
1bdd0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
1bde0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
1bdf0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
1be00 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
1be10 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1be20 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1be30 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
1be40 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1be50 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
1be60 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1be70 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1be80 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1be90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1bea0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
1beb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
1bec0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1bed0 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1bee0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
1bef0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1bf00 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
1bf10 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1bf20 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1bf30 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1bf40 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1bf50 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
1bf60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1bf70 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
1bf80 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
1bf90 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
1bfa0 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b  lue P3 into cook
1bfb0 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
1bfc0 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
1bfd0 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
1bfe0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
1bff0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1c000 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1c010 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
1c020 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1c030 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
1c040 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1c050 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
1c060 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1c070 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
1c080 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
1c090 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
1c0a0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1c0b0 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
1c0c0 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
1c0d0 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
1c0e0 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
1c0f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
1c100 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a  Cookie: {.  Db *
1c110 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
1c120 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
1c130 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73  ter(p, 0);.  ass
1c140 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1c150 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1c160 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c170 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c180 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1c190 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1c1a0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1c1b0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1c1c0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1c1d0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1c1e0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1c1f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c200 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1c210 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1c220 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1c230 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1c240 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1c250 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1c260 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1c270 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1c280 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1c290 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1c2a0 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1c2b0 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1c2c0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1c2d0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1c2e0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1c2f0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1c300 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1c310 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1c320 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1c330 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1c340 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1c350 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
1c360 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
1c370 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73  maChange;.  }els
1c380 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1c390 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1c3a0 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1c3b0 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1c3c0 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1c3d0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1c3e0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1c3f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1c400 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1c410 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1c420 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1c430 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1c440 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1c450 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1c460 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1c470 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1c480 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1c490 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1c4a0 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
1c4b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
1c4c0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1c4d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c4e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1c4f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c500 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
1c510 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c520 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c530 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1c540 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
1c550 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
1c560 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
1c570 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
1c580 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
1c590 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
1c5a0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
1c5b0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
1c5c0 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
1c5d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
1c5e0 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
1c5f0 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
1c600 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
1c610 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
1c620 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
1c630 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
1c640 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
1c650 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
1c660 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
1c670 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
1c680 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
1c690 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
1c6a0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
1c6b0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
1c6c0 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
1c6d0 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
1c6e0 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
1c6f0 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
1c700 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1c710 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1c720 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1c730 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1c740 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1c750 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1c760 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1c770 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1c780 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1c790 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1c7a0 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1c7b0 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1c7c0 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1c7d0 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
1c7e0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1c7f0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1c800 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1c810 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1c820 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1c830 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1c840 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1c850 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1c860 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74  yInfo .** object
1c870 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69  , then table bei
1c880 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1c890 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72  e an [index b-tr
1c8a0 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  ee] where the.**
1c8b0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
1c8c0 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1c8d0 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1c8e0 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1c8f0 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74  f that index b-t
1c900 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ree. Otherwise, 
1c910 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1c920 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74  ger .** value, t
1c930 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65  hen the table be
1c940 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1c950 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72  be a [table b-tr
1c960 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75  ee] with a.** nu
1c970 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c980 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
1c990 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a   value of P4..**
1c9a0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70  .** See also: Op
1c9b0 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49  enWrite, ReopenI
1c9c0 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dx.*/./* Opcode:
1c9d0 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32   ReopenIdx P1 P2
1c9e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1c9f0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1ca00 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Db=P3.**.** The 
1ca10 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1ca20 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1ca30 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1ca40 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1ca50 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ca60 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1ca70 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1ca80 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a  n on the same.**
1ca90 20 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69   b-tree and if i
1caa0 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65  t is this opcode
1cab0 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
1cac0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cad0 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  s,.** if the cur
1cae0 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f  sor is already o
1caf0 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70  pen, do not reop
1cb00 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  en it..**.** The
1cb10 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1cb20 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  e may only be us
1cb30 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72  ed with P5==0 or
1cb40 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b   P5==OPFLAG_SEEK
1cb50 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50  EQ.** and with P
1cb60 34 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59  4 being a P4_KEY
1cb70 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1cb80 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1cb90 33 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20  3 value must.** 
1cba0 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  be the same as e
1cbb0 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1cbc0 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1cbd0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1cbe0 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a  rsor.** number..
1cbf0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1cc00 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1cc10 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1cc20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1cc30 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1cc40 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1cc50 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1cc60 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1cc70 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1cc80 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1cc90 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1cca0 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1ccb0 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1ccc0 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  GT).** </ul>.**.
1ccd0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f  ** See also: OP_
1cce0 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65  OpenRead, OP_Ope
1ccf0 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  nWrite.*/./* Opc
1cd00 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1cd10 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1cd20 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1cd30 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1cd40 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1cd50 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1cd60 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1cd70 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1cd80 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1cd90 20 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20   (or whose root 
1cda0 70 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20  page is held in 
1cdb0 72 65 67 69 73 74 65 72 20 50 32 20 69 66 20 74  register P2 if t
1cdc0 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49  he.** OPFLAG_P2I
1cdd0 53 52 45 47 20 62 69 74 20 69 73 20 73 65 74 20  SREG bit is set 
1cde0 69 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f  in P5 - see belo
1cdf0 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  w)..**.** The P4
1ce00 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1ce10 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1ce20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1ce30 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1ce40 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1ce50 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1ce60 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1ce70 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1ce80 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e  .** object, then
1ce90 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1cea0 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b  ned must be an [
1ceb0 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68  index b-tree] wh
1cec0 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e  ere the.** KeyIn
1ced0 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  fo object define
1cee0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1cef0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1cf00 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74  sequence of that
1cf10 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f   index b-tree. O
1cf20 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1cf30 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1cf40 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  * value, then th
1cf50 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1cf60 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b  ened must be a [
1cf70 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69  table b-tree] wi
1cf80 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  th a.** number o
1cf90 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73  f columns no les
1cfa0 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  s than the value
1cfb0 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c   of P4..**.** Al
1cfc0 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a  lowed P5 bits:.*
1cfd0 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20  * <ul>.** <li>  
1cfe0 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53  <b>0x02 OPFLAG_S
1cff0 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20  EEKEQ</b>: This 
1d000 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79  cursor will only
1d010 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   be used for.** 
1d020 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c        equality l
1d030 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e  ookups (implemen
1d040 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66  ted as a pair of
1d050 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b   opcodes OP_Seek
1d060 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20  GE/OP_IdxGT.**  
1d070 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c       of OP_SeekL
1d080 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c  E/OP_IdxGT).** <
1d090 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46  li>  <b>0x08 OPF
1d0a0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62  LAG_FORDELETE</b
1d0b0 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 69  >: This cursor i
1d0c0 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73  s used only to s
1d0d0 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  eek.**       and
1d0e0 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65   subsequently de
1d0f0 6c 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20  lete entries in 
1d100 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1d110 20 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20   This is a.**   
1d120 20 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20      hint to the 
1d130 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74  storage engine t
1d140 68 61 74 20 74 68 65 20 73 74 6f 72 61 67 65 20  hat the storage 
1d150 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65  engine is allowe
1d160 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67  d to.**       ig
1d170 6e 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20  nore.  The hint 
1d180 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
1d190 68 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69  he official SQLi
1d1a0 74 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67  te b*tree storag
1d1b0 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e  e.**       engin
1d1c0 65 2c 20 62 75 74 20 69 73 20 75 73 65 64 20 62  e, but is used b
1d1d0 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69  y COMDB2..** <li
1d1e0 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41  >  <b>0x10 OPFLA
1d1f0 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55  G_P2ISREG</b>: U
1d200 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1d210 66 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  f register P2.**
1d220 20 20 20 20 20 20 20 61 73 20 74 68 65 20 72 6f         as the ro
1d230 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65  ot page, not the
1d240 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
1d250 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  elf..** </ul>.**
1d260 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1d270 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20  tion works like 
1d280 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1d290 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1d2a0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1d2b0 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a  ead/write mode..
1d2c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d2d0 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f  OP_OpenRead, OP_
1d2e0 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73  ReopenIdx.*/.cas
1d2f0 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20  e OP_ReopenIdx: 
1d300 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1d310 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1d320 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1d330 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1d340 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1d350 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1d360 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1d370 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
1d380 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1d390 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1d3a0 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1d3b0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1d3c0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43  _KEYINFO );.  pC
1d3d0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
1d3e0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1d3f0 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f  ur && pCur->pgno
1d400 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e  Root==(u32)pOp->
1d410 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1d420 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1d430 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1d440 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1d450 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1d460 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65   */.    goto ope
1d470 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1d480 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20  ts;.  }.  /* If 
1d490 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f  the cursor is no
1d4a0 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  t currently open
1d4b0 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   or is open on a
1d4c0 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1d4d0 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c  index, then fall
1d4e0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
1d4f0 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72  _OpenRead to for
1d500 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63  ce a reopen */.c
1d510 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
1d520 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
1d530 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70  te:..  assert( p
1d540 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1d550 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1d560 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1d570 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1d580 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1d590 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1d5a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1d5b0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64  ode==OP_OpenRead
1d5c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1d5d0 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20  =OP_ReopenIdx.  
1d5e0 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65          || p->re
1d5f0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
1d600 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d  if( p->expired==
1d610 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
1d620 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1d630 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1d640 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d650 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1d660 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1d670 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1d680 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1d690 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1d6a0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1d6b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1d6c0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1d6d0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1d6e0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1d6f0 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1d700 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1d710 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1d720 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1d730 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1d740 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1d750 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1d760 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1d770 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1d780 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1d790 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1d7a0 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1d7b0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1d7c0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1d7d0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1d7e0 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1d7f0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1d800 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1d810 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1d820 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1d830 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1d840 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1d850 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1d860 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1d870 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1d880 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1d890 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1d8a0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1d8b0 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1d8c0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1d8d0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73  rsor) );.    ass
1d8e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1d8f0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1d900 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1d910 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1d920 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1d930 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1d940 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1d950 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1d960 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1d970 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1d980 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1d990 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1d9a0 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1d9b0 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1d9c0 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1d9d0 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
1d9e0 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1d9f0 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1da00 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1da10 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1da20 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1da30 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1da40 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1da50 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1da60 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1da70 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1da80 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1da90 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1daa0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1dab0 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1dac0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1dad0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1dae0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1daf0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1db00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1db10 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1db20 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1db30 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1db40 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1db50 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1db60 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  AllField;.  }els
1db70 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1db80 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1db90 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1dba0 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1dbb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dbc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1dbd0 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1dbe0 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1dbf0 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1dc00 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1dc10 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1dc20 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1dc30 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1dc40 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1dc50 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1dc60 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1dc70 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1dc80 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1dc90 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1dca0 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1dcb0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1dcc0 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1dcd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1dce0 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1dcf0 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1dd00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dd10 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1dd20 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1dd30 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1dd40 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1dd50 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1dd60 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1dd70 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1dd80 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1dd90 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1dda0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1ddb0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1ddc0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1ddd0 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1dde0 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1ddf0 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1de00 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1de10 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1de20 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1de30 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1de40 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1de50 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1de60 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1de70 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1de80 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1de90 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1dea0 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1deb0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1dec0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1ded0 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1dee0 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1def0 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1df00 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1df10 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1df20 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1df30 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1df40 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1df50 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1df60 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1df70 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1df80 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1df90 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1dfa0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1dfd0 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1dfe0 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1dff0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e000 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e010 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e020 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70   Opcode: OpenDup
1e030 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1e040 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1e050 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69  rsor P1 that poi
1e060 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20  nts to the same 
1e070 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
1e080 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e  as.** cursor P2.
1e090 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72 20    The P2 cursor 
1e0a0 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f  must have been o
1e0b0 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72  pened by a prior
1e0c0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1e0d0 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e  l.** opcode.  On
1e0e0 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1e0f0 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c  sors may be dupl
1e100 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75  icated..**.** Du
1e110 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72 61  plicate ephemera
1e120 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75 73  l cursors are us
1e130 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e  ed for self-join
1e140 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65  s of materialize
1e150 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65  d views..*/.case
1e160 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20   OP_OpenDup: {. 
1e170 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72   VdbeCursor *pOr
1e180 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72  ig;    /* The or
1e190 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f  iginal cursor to
1e1a0 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1e1b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1e1c0 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  pCx;      /* The
1e1d0 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a   new cursor */..
1e1e0 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43    pOrig = p->apC
1e1f0 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  sr[pOp->p2];.  a
1e200 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42  ssert( pOrig->pB
1e210 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  tx!=0 );  /* Onl
1e220 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  y ephemeral curs
1e230 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69  ors can be dupli
1e240 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20  cated */..  pCx 
1e250 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e260 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72  (p, pOp->p1, pOr
1e270 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20  ig->nField, -1, 
1e280 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1e290 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1e2a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1e2b0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1e2c0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1e2d0 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  al = 1;.  pCx->p
1e2e0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d  KeyInfo = pOrig-
1e2f0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78  >pKeyInfo;.  pCx
1e300 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69  ->isTable = pOri
1e310 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 72 63  g->isTable;.  rc
1e320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1e330 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74  ursor(pOrig->pBt
1e340 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1e350 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1e380 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43  Info, pCx->uc.pC
1e390 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65  ursor);.  /* The
1e3a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1e3b0 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61  sor() routine ca
1e3c0 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20  n only fail for 
1e3d0 74 68 65 20 66 69 72 73 74 20 63 75 72 73 6f 72  the first cursor
1e3e0 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72  .  ** opened for
1e3f0 20 61 20 64 61 74 61 62 61 73 65 2e 20 20 53 69   a database.  Si
1e400 6e 63 65 20 74 68 65 72 65 20 69 73 20 61 6c 72  nce there is alr
1e410 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72  eady an open cur
1e420 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20  sor when this.  
1e430 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e  ** opcode is run
1e440 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72  , the sqlite3Btr
1e450 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f  eeCursor() canno
1e460 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65  t fail */.  asse
1e470 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1e480 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  K );.  break;.}.
1e490 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1e4a0 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1e4b0 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1e4c0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1e4d0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1e4e0 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1e4f0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1e500 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1e510 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1e520 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1e530 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1e540 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1e550 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1e560 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1e570 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1e580 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1e590 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1e5a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
1e5b0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6c   cursor P1 is al
1e5c0 72 65 61 64 79 20 6f 70 65 6e 65 64 20 6f 6e 20  ready opened on 
1e5d0 61 6e 20 65 70 68 65 72 6d 61 6c 20 74 61 62 6c  an ephermal tabl
1e5e0 65 2c 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  e, the table.** 
1e5f0 69 73 20 63 6c 65 61 72 65 64 20 28 61 6c 6c 20  is cleared (all 
1e600 63 6f 6e 74 65 6e 74 20 69 73 20 65 72 61 73 65  content is erase
1e610 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  d)..**.** P2 is 
1e620 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1e630 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1e640 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1e650 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1e660 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1e670 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1e680 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1e690 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1e6a0 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1e6b0 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1e6c0 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1e6d0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1e6e0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1e6f0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1e700 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1e710 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1e720 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1e730 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1e740 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1e750 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1e760 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1e770 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1e780 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1e790 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1e7a0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1e7b0 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1e7c0 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1e7d0 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1e7e0 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1e7f0 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1e800 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1e810 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1e820 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1e830 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1e840 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1e850 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1e860 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1e870 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1e880 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1e890 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1e8a0 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1e8b0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1e8c0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1e8d0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1e8e0 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1e8f0 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1e900 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1e910 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1e920 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1e930 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1e940 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1e950 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1e960 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1e970 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1e980 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1e990 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1e9a0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1e9b0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1e9c0 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1e9d0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1e9e0 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1e9f0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1ea00 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1ea10 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1ea20 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1ea30 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1ea40 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61   );.  pCx = p->a
1ea50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ea60 20 69 66 28 20 70 43 78 20 29 7b 0a 20 20 20 20   if( pCx ){.    
1ea70 2f 2a 20 49 66 20 74 68 65 20 65 70 68 65 72 6d  /* If the epherm
1ea80 65 72 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6c  eral table is al
1ea90 72 65 61 64 79 20 6f 70 65 6e 2c 20 65 72 61 73  ready open, eras
1eaa0 65 20 61 6c 6c 20 65 78 69 73 74 69 6e 67 20 63  e all existing c
1eab0 6f 6e 74 65 6e 74 0a 20 20 20 20 2a 2a 20 73 6f  ontent.    ** so
1eac0 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20   that the table 
1ead0 69 73 20 65 6d 70 74 79 20 61 67 61 69 6e 2c 20  is empty again, 
1eae0 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
1eaf0 74 69 6e 67 20 61 20 6e 65 77 20 74 61 62 6c 65  ting a new table
1eb00 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
1eb10 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
1eb20 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
1eb30 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30  pCx->pgnoRoot, 0
1eb40 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
1eb50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1eb60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 62 72 65  o_error;.    bre
1eb70 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 78 20 3d 20  ak;.  }.  pCx = 
1eb80 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1eb90 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1eba0 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1ebb0 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43  BTREE);.  if( pC
1ebc0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1ebd0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1ebe0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  ow = 1;.  pCx->i
1ebf0 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
1ec00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ec10 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73  reeOpen(db->pVfs
1ec20 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70  , 0, db, &pCx->p
1ec30 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Btx, .          
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1ec50 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1ec60 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
1ec70 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
1ec80 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
1ec90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1eca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ecb0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
1ecc0 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b 0a 20  ->pBtx, 1, 0);. 
1ecd0 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
1ece0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
1ecf0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1ed00 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1ed10 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1ed20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
1ed30 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1ed40 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
1ed50 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
1ed60 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1ed70 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1ed80 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1ed90 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1eda0 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1edb0 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1edc0 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1edd0 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1ede0 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1edf0 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1ee00 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70  .    if( (pCx->p
1ee10 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1ee20 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1ee30 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20  yInfo)!=0 ){.   
1ee40 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ee50 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1ee60 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1ee70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1ee80 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1ee90 74 78 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d 3e  tx, (int*)&pCx->
1eea0 70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20 20  pgnoRoot,.      
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1eed0 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1eee0 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1eef0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1ef00 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1ef10 74 28 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74  t( pCx->pgnoRoot
1ef20 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20  ==MASTER_ROOT+1 
1ef30 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1ef40 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1ef50 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  =db );.        a
1ef60 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1ef70 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1ef80 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1ef90 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1efa0 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d  (pCx->pBtx, pCx-
1efb0 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45  >pgnoRoot, BTREE
1efc0 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f          pKeyInfo
1eff0 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
1f000 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1f010 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1f020 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1f030 20 20 20 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f       pCx->pgnoRo
1f040 6f 74 20 3d 20 4d 41 53 54 45 52 5f 52 4f 4f 54  ot = MASTER_ROOT
1f050 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1f060 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1f070 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45  pCx->pBtx, MASTE
1f080 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52  R_ROOT, BTREE_WR
1f090 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CSR,.           
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43     0, pCx->uc.pC
1f0c0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
1f0d0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1f0e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1f0f0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1f100 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1f110 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1f120 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1f130 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62  _UNORDERED);.  b
1f140 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f150 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
1f160 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1f170 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1f180 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1f190 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1f1a0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1f1b0 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1f1c0 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1f1d0 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1f1e0 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1f1f0 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1f200 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1f210 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1f220 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75  m..**.** If argu
1f230 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  ment P3 is non-z
1f240 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64  ero, then it ind
1f250 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20  icates that the 
1f260 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73  sorter may.** as
1f270 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62  sume that a stab
1f280 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72  le sort consider
1f290 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33  ing the first P3
1f2a0 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a   fields of each.
1f2b0 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63  ** key is suffic
1f2c0 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20  ient to produce 
1f2d0 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73  the required res
1f2e0 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ults..*/.case OP
1f2f0 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20  _SorterOpen: {. 
1f300 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1f310 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1f320 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1f330 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1f340 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1f350 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1f360 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1f370 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45  1, CURTYPE_SORTE
1f380 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  R);.  if( pCx==0
1f390 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1f3a0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1f3b0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1f3c0 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1f3d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1f3e0 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1f3f0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1f400 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1f410 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1f420 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1f430 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a   pOp->p3, pCx);.
1f440 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1f450 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1f460 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1f470 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1f480 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20  nceTest P1 P2 * 
1f490 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1f4a0 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e   if( cursor[P1].
1f4b0 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a  ctr++ ) pc = P2.
1f4c0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
1f4d0 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20  rter cursor. If 
1f4e0 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75  the sequence cou
1f4f0 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
1f500 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20  y zero, jump.** 
1f510 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73  to P2. Regardles
1f520 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
1f530 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  not the jump is 
1f540 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74  taken, increment
1f550 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75   the.** the sequ
1f560 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  ence value..*/.c
1f570 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54  ase OP_SequenceT
1f580 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  est: {.  VdbeCur
1f590 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
1f5a0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f5b0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f5c0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1f5d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f5e0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
1f5f0 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28  ter(pC) );.  if(
1f600 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b   (pC->seqCount++
1f610 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
1f620 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
1f630 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f640 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
1f650 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  do P1 P2 P3 * *.
1f660 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20  ** Synopsis: P3 
1f670 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d  columns in r[P2]
1f680 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1f690 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
1f6a0 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
1f6b0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
1f6c0 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
1f6d0 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
1f6e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
1f6f0 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20   one row is the 
1f700 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
1f710 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
1f720 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f730 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
1f740 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
1f750 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
1f760 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
1f770 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
1f780 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65   P2..**.** A pse
1f790 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
1f7a0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
1f7b0 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64   is used to hold
1f7c0 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1f7d0 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65   output from the
1f7e0 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20   sorter so that 
1f7f0 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64  the row can be d
1f800 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a  ecomposed into.*
1f810 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  * individual col
1f820 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f  umns using the O
1f830 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
1f840 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
1f850 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65  opcode.** is the
1f860 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63   only cursor opc
1f870 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77  ode that works w
1f880 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62  ith a pseudo-tab
1f890 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  le..**.** P3 is 
1f8a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  the number of fi
1f8b0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
1f8c0 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  rds that will be
1f8d0 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68   stored by.** th
1f8e0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  e pseudo-table..
1f8f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50  */.case OP_OpenP
1f900 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43  seudo: {.  VdbeC
1f910 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1f920 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f930 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f940 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70  Op->p3>=0 );.  p
1f950 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1f960 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1f970 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52  pOp->p3, -1, CUR
1f980 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20  TYPE_PSEUDO);.  
1f990 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1f9a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1f9b0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1f9c0 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20  pCx->seekResult 
1f9d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1f9e0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1f9f0 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20 70 73   /* Give this ps
1fa00 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20 66 61  eudo-cursor a fa
1fa10 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f 69 6e  ke BtCursor poin
1fa20 74 65 72 20 73 6f 20 74 68 61 74 20 70 43 78 0a  ter so that pCx.
1fa30 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61 66 65    ** can be safe
1fa40 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ly passed to sql
1fa50 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
1fa60 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20 61 76  veto().  This av
1fa70 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20 2a 2a  oids a test.  **
1fa80 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72 54 79   for pCx->eCurTy
1fa90 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1faa0 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71 6c 69  E inside of sqli
1fab0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
1fac0 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69 63 68  eto().  ** which
1fad0 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63   is a performanc
1fae0 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  e optimization *
1faf0 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  /.  pCx->uc.pCur
1fb00 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  sor = sqlite3Btr
1fb10 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72 73 6f  eeFakeValidCurso
1fb20 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r();.  assert( p
1fb30 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1fb40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1fb50 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1fb60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1fb70 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1fb80 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1fb90 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1fba0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1fbb0 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1fbc0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1fbd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1fbe0 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1fbf0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1fc00 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1fc10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1fc20 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1fc30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1fc40 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1fc50 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1fc60 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  ak;.}..#ifdef SQ
1fc70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1fc80 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20  MN_USED_MASK./* 
1fc90 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55  Opcode: ColumnsU
1fca0 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  sed P1 * * P4 *.
1fcb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1fcc0 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78  e (which only ex
1fcd0 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77  ists if SQLite w
1fce0 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
1fcf0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1fd00 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1fd10 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77  SK) identifies w
1fd20 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  hich columns of 
1fd30 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  the.** table or 
1fd40 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72  index for cursor
1fd50 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50   P1 are used.  P
1fd60 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e  4 is a 64-bit in
1fd70 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54  teger.** (P4_INT
1fd80 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  64) in which the
1fd90 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61   first 63 bits a
1fda0 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  re one for each 
1fdb0 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  of the.** first 
1fdc0 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  63 columns of th
1fdd0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1fde0 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
1fdf0 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ly used.** by th
1fe00 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68  e cursor.  The h
1fe10 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73  igh-order bit is
1fe20 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75   set if any colu
1fe30 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20  mn after.** the 
1fe40 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f  64th is used..*/
1fe50 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73  .case OP_Columns
1fe60 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75  Used: {.  VdbeCu
1fe70 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d  rsor *pC;.  pC =
1fe80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1fe90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1fea0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1feb0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
1fec0 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28  C->maskUsed = *(
1fed0 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36  u64*)pOp->p4.pI6
1fee0 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  4;.  break;.}.#e
1fef0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
1ff00 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1ff10 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1ff20 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1ff30 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1ff40 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1ff50 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1ff60 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1ff70 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1ff80 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1ff90 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1ffa0 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1ffb0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1ffc0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1ffd0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1ffe0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1fff0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
20000 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
20010 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
20020 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
20030 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
20040 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
20050 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
20060 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
20070 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
20080 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
20090 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
200a0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
200b0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
200c0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
200d0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
200e0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
200f0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
20100 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
20110 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  If the cursor P1
20120 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
20130 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45  g the OPFLAG_SEE
20140 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74  KEQ flag, then t
20150 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69  his.** opcode wi
20160 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f  ll always land o
20170 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  n a record that 
20180 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74  equally equals t
20190 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c  he key, or.** el
201a0 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  se jump immediat
201b0 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e  ely to P2.  When
201c0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f   the cursor is O
201d0 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68  PFLAG_SEEKEQ, th
201e0 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73  is.** opcode mus
201f0 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t be followed by
20200 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65   an IdxLE opcode
20210 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61   with the same a
20220 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65  rguments..** The
20230 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
20240 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66  ll be skipped if
20250 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63   this opcode suc
20260 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a  ceeds, but the.*
20270 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  * IdxLE opcode w
20280 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73  ill be used on s
20290 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69  ubsequent loop i
202a0 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  terations..**.**
202b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
202c0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
202d0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
202e0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
202f0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
20300 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
20310 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
20320 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
20330 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
20340 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
20350 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
20360 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20370 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
20380 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
20390 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
203a0 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
203b0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
203c0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
203d0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
203e0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
203f0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
20400 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
20410 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
20420 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
20430 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
20440 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
20450 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
20460 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
20470 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
20480 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
20490 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
204a0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
204b0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
204c0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
204d0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
204e0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
204f0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
20500 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
20510 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
20520 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
20530 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
20540 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
20550 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
20560 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
20570 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
20580 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
20590 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
205a0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
205b0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
205c0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
205d0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
205e0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
205f0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
20600 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20610 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
20620 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
20630 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
20640 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
20650 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
20660 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
20670 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
20680 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
20690 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
206a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
206b0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
206c0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
206d0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
206e0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
206f0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
20700 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
20710 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
20720 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
20730 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
20740 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
20750 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
20760 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
20770 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
20780 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
20790 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
207a0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
207b0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
207c0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
207d0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
207e0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
207f0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
20800 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
20810 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
20820 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
20830 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
20840 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
20850 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
20860 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
20870 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
20880 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
20890 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
208a0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
208b0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
208c0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
208d0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
208e0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
208f0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
20900 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
20910 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
20920 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
20930 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
20940 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
20950 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
20960 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
20970 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
20980 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20990 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
209a0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
209b0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
209c0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
209d0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
209e0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
209f0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
20a00 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
20a10 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
20a20 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
20a30 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
20a40 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
20a50 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
20a60 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
20a70 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
20a80 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
20a90 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
20aa0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
20ab0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
20ac0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
20ad0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
20ae0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
20af0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
20b00 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
20b10 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
20b20 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
20b30 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
20b40 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
20b50 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
20b60 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
20b70 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
20b80 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
20b90 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
20ba0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
20bb0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
20bc0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
20bd0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
20be0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
20bf0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
20c00 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
20c10 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
20c20 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
20c30 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
20c40 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
20c50 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
20c60 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
20c70 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
20c80 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
20c90 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
20ca0 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
20cb0 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
20cc0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
20cd0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
20ce0 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
20cf0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
20d00 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
20d10 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63   by an IdxGE opc
20d20 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
20d30 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
20d40 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65  The IdxGE opcode
20d50 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
20d60 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
20d70 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
20d80 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64  e.** IdxGE opcod
20d90 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
20da0 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
20db0 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
20dc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20dd0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
20de0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
20df0 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
20e00 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
20e10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
20e20 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
20e30 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
20e40 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
20e50 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  oup */.case OP_S
20e60 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
20e70 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f  * jump, in3, gro
20e80 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  up */.case OP_Se
20e90 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGT: {       /*
20ea0 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75   jump, in3, grou
20eb0 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  p */.  int res; 
20ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
20ed0 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a  parison result *
20ee0 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20  /.  int oc;     
20ef0 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
20f00 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
20f10 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
20f20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a  cursor to seek *
20f30 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  /.  UnpackedReco
20f40 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65  rd r;  /* The ke
20f50 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f  y to seek for */
20f60 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
20f70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20f80 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69  of columns or fi
20f90 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20  elds in the key 
20fa0 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
20fb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72          /* The r
20fc0 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
20fd0 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  eek to */.  int 
20fe0 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f  eqOnly;        /
20ff0 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65  * Only intereste
21000 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20  d in == results 
21010 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
21020 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21030 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21050 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
21060 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21070 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21080 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
21090 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
210a0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
210b0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
210c0 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
210d0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
210e0 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
210f0 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
21100 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
21110 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
21120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21130 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
21140 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
21150 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63  ursor!=0 );.  oc
21160 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
21170 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20    eqOnly = 0;.  
21180 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
21190 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
211a0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
211b0 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
211c0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70  .#endif..  if( p
211d0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
211e0 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53    /* The BTREE_S
211f0 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f  EEK_EQ flag is o
21200 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78  nly set on index
21210 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20   cursors */.    
21220 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
21230 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e  treeCursorHasHin
21240 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
21250 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29  , BTREE_SEEK_EQ)
21260 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
21270 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20    || CORRUPT_DB 
21280 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69  );..    /* The i
21290 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
212a0 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
212b0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
212c0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
212d0 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
212e0 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
212f0 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
21300 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
21310 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
21320 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20  eek, so convert 
21330 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
21340 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21350 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  ;.    if( (pIn3-
21360 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
21370 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
21380 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
21390 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
213a0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
213b0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
213c0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
213d0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
213e0 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
213f0 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
21400 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
21410 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
21420 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
21430 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
21440 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
21450 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
21460 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
21470 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
21480 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
21490 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
214a0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
214b0 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
214c0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
214d0 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
214e0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
214f0 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
21500 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
21510 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
21520 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
21530 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
21540 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  */.        VdbeB
21550 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
21560 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
21570 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
21580 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
21590 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
215a0 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
215b0 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
215c0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
215d0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
215e0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20  , substitute >= 
215f0 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20  for > and < for 
21600 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20  <=. e.g. if the 
21610 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20  search term.    
21620 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20    ** is 4.9 and 
21630 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72  the integer appr
21640 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20  oximation 5:.   
21650 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
21660 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29        (x >  4.9)
21670 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d      ->     (x >=
21680 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   5).      **    
21690 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20      (x <= 4.9)  
216a0 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35    ->     (x <  5
216b0 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
216c0 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28   if( pIn3->u.r<(
216d0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
216e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
216f0 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
21700 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
21710 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
21720 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
21730 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
21740 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
21750 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
21760 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
21770 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
21780 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
21790 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
217a0 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
217b0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
217c0 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
217d0 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
217e0 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
217f0 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
21800 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
21810 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
21820 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
21830 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
21840 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64  if( pIn3->u.r>(d
21850 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
21860 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
21870 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65  _SeekLE==(OP_See
21880 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLT+1) );.      
21890 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
218a0 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b  kGT==(OP_SeekGE+
218b0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
218c0 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54  sert( (OP_SeekLT
218d0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
218e0 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29  SeekGE & 0x0001)
218f0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
21900 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
21910 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
21920 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
21930 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
21940 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21950 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21960 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
21970 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
21980 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d  &res);.    pC->m
21990 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
219a0 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
219b0 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20  OP_Delete */.   
219c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
219d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
219e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
219f0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ror;.    }.  }el
21a00 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61  se{.    /* For a
21a10 20 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65   cursor with the
21a20 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68   BTREE_SEEK_EQ h
21a30 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50  int, only the OP
21a40 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20  _SeekGE and.    
21a50 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63  ** OP_SeekLE opc
21a60 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  odes are allowed
21a70 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74  , and these must
21a80 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   be immediately 
21a90 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20  followed.    ** 
21aa0 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f  by an OP_IdxGT o
21ab0 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64  r OP_IdxLT opcod
21ac0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  e, respectively,
21ad0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
21ae0 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ey..    */.    i
21af0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
21b00 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
21b10 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
21b20 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20  EE_SEEK_EQ) ){. 
21b30 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b       eqOnly = 1;
21b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21b50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
21b60 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  eekGE || pOp->op
21b70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  code==OP_SeekLE 
21b80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
21b90 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
21ba0 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
21bb0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
21bc0 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73  xGT );.      ass
21bd0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d  ert( pOp[1].p1==
21be0 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20  pOp[0].p1 );.   
21bf0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
21c00 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20  ].p2==pOp[0].p2 
21c10 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
21c20 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b   pOp[1].p3==pOp[
21c30 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61  0].p3 );.      a
21c40 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34  ssert( pOp[1].p4
21c50 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20  .i==pOp[0].p4.i 
21c60 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46  );.    }..    nF
21c70 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
21c80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
21c90 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
21ca0 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72  T32 );.    asser
21cb0 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
21cc0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21cd0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
21ce0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
21cf0 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f  6)nField;..    /
21d00 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
21d10 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
21d20 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
21d30 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a  y faster:.    **
21d40 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
21d50 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGT || oc==OP_S
21d60 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20  eekLE ){.    ** 
21d70 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
21d80 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = -1;.    **   
21d90 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20  }else{.    **   
21da0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
21db0 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a   +1;.    **   }.
21dc0 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66      */.    r.def
21dd0 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20  ault_rc = ((1 & 
21de0 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29  (oc - OP_SeekLT)
21df0 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20  ) ? -1 : +1);.  
21e00 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
21e10 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66  _SeekGT || r.def
21e20 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
21e30 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
21e40 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65  P_SeekLE || r.de
21e50 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
21e60 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
21e70 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64  OP_SeekGE || r.d
21e80 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
21e90 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
21ea0 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e  =OP_SeekLT || r.
21eb0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
21ec0 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  ;..    r.aMem = 
21ed0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21ee0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21ef0 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
21f00 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
21f10 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
21f20 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
21f30 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
21f40 65 6e 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65  endif.    r.eqSe
21f50 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  en = 0;.    rc =
21f60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
21f70 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
21f80 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  uc.pCursor, &r, 
21f90 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
21fa0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
21fb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
21fc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21fd0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
21fe0 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65  f( eqOnly && r.e
21ff0 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  qSeen==0 ){.    
22000 20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30    assert( res!=0
22010 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73   );.      goto s
22020 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20  eek_not_found;. 
22030 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
22040 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
22050 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
22060 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
22070 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
22080 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
22090 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
220a0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
220b0 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
220c0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
220d0 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
220e0 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
220f0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
22100 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
22110 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
22120 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
22130 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
22140 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  xt(pC->uc.pCurso
22150 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  r, 0);.      if(
22160 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
22170 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  {.        if( rc
22180 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
22190 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
221a0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
221b0 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
221c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
221d0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
221e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
221f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
22200 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
22210 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
22220 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  }.  }else{.    a
22230 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
22240 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLT || oc==OP_S
22250 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28  eekLE );.    if(
22260 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
22270 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
22280 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  LT) ){.      res
22290 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
222a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
222b0 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75  vious(pC->uc.pCu
222c0 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20  rsor, 0);.      
222d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
222e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  K ){.        if(
222f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
22300 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
22310 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
22320 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
22330 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
22340 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
22350 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22360 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
22370 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
22380 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
22390 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
223a0 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
223b0 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
223c0 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
223d0 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
223e0 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
223f0 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
22400 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
22410 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
22420 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f   }.  }.seek_not_
22430 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28  found:.  assert(
22440 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
22450 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
22460 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
22470 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f   res ){.    goto
22480 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
22490 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20  else if( eqOnly 
224a0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
224b0 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
224c0 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
224d0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
224e0 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20  T );.    pOp++; 
224f0 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49  /* Skip the OP_I
22500 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54  dxLt or OP_IdxGT
22510 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f   that follows */
22520 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22530 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
22540 48 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Hit P1 P2 * * *.
22550 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 73 65 65  ** Synopsis: see
22560 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65  kHit=P2.**.** Se
22570 74 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c  t the seekHit fl
22580 61 67 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ag on cursor P1 
22590 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
225a0 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 65 6b 48  P2..** The seekH
225b0 69 74 20 66 6c 61 67 20 69 73 20 75 73 65 64 20  it flag is used 
225c0 62 79 20 74 68 65 20 49 66 4e 6f 48 6f 70 65 20  by the IfNoHope 
225d0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  opcode..**.** P1
225e0 20 6d 75 73 74 20 62 65 20 61 20 76 61 6c 69 64   must be a valid
225f0 20 62 2d 74 72 65 65 20 63 75 72 73 6f 72 2e 20   b-tree cursor. 
22600 20 50 32 20 6d 75 73 74 20 62 65 20 61 20 62 6f   P2 must be a bo
22610 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20  olean value,.** 
22620 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
22630 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 48 69  /.case OP_SeekHi
22640 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
22650 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
22660 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22670 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22680 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22690 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
226a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
226b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
226c0 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p2==0 || pOp->p
226d0 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d 3e 73 65  2==1 );.  pC->se
226e0 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e 70 32 20  ekHit = pOp->p2 
226f0 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  & 1;.  break;.}.
22700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
22710 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
22720 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
22730 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
22740 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
22750 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
22760 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
22770 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
22780 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
22790 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
227a0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
227b0 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
227c0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
227d0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
227e0 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
227f0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
22800 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
22810 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
22820 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
22830 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  a prefix of any 
22840 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
22850 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
22860 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20  to P2 and.** P1 
22870 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
22880 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
22890 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
228a0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
228b0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
228c0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
228d0 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76  it can be.** adv
228e0 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72  anced in the for
228f0 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20  ward direction. 
22900 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75   The Next instru
22910 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c  ction will work,
22920 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20  .** but not the 
22930 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
22940 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22950 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  : NotFound, NoCo
22960 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74  nflict, NotExist
22970 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20  s. SeekGe.*/./* 
22980 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64  Opcode: NotFound
22990 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
229a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
229b0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
229c0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
229d0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
229e0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
229f0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
22a00 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
22a10 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
22a20 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
22a30 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
22a40 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
22a50 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
22a60 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
22a70 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
22a80 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
22a90 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
22aa0 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
22ab0 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  not the prefix o
22ac0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
22ad0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
22ae0 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66   made to P2.  If
22af0 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e   P1 .** does con
22b00 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68  tain an entry wh
22b10 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68  ose prefix match
22b20 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63  es the P3/P4 rec
22b30 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c  ord then control
22b40 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  .** falls throug
22b50 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
22b60 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31  struction and P1
22b70 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
22b80 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63  g at the.** matc
22b90 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
22ba0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
22bb0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22bc0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22bd0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22be0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
22bf0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
22c00 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22c10 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
22c20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
22c30 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
22c40 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
22c50 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22c60 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  : Found, NotExis
22c70 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  ts, NoConflict, 
22c80 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f  IfNoHope.*/./* O
22c90 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f 70 65 20  pcode: IfNoHope 
22ca0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
22cb0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
22cc0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65  [P3@P4].**.** Re
22cd0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
22ce0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
22cf0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
22d00 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
22d10 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
22d20 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
22d30 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
22d40 66 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c  f the seekHit fl
22d50 61 67 20 69 73 20 73 65 74 20 6f 6e 20 50 31 2c  ag is set on P1,
22d60 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70   then.** this op
22d70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  code is a no-op.
22d80 20 20 42 75 74 20 69 66 20 74 68 65 20 73 65 65    But if the see
22d90 6b 48 69 74 20 66 6c 61 67 20 6f 66 20 50 31 20  kHit flag of P1 
22da0 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 0a 2a  is clear, then.*
22db0 2a 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * check to see i
22dc0 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 20 65  f there is any e
22dd0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 61 74 20  ntry in P1 that 
22de0 6d 61 74 63 68 65 73 20 74 68 65 0a 2a 2a 20 70  matches the.** p
22df0 72 65 66 69 78 20 69 64 65 6e 74 69 66 69 65 64  refix identified
22e00 20 62 79 20 50 33 20 61 6e 64 20 50 34 2e 20 20   by P3 and P4.  
22e10 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d 61 74 63  If no entry matc
22e20 68 65 73 20 74 68 65 20 70 72 65 66 69 78 2c 0a  hes the prefix,.
22e30 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  ** jump to P2.  
22e40 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
22e50 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68  hrough..**.** Th
22e60 69 73 20 6f 70 63 6f 64 65 20 62 65 68 61 76 65  is opcode behave
22e70 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75  s like OP_NotFou
22e80 6e 64 20 69 66 20 74 68 65 20 73 65 65 6b 48 69  nd if the seekHi
22e90 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20 63 6c 65  t.** flag is cle
22ea0 61 72 20 61 6e 64 20 69 74 20 62 65 68 61 76 65  ar and it behave
22eb0 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69  s like OP_Noop i
22ec0 66 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c  f the seekHit fl
22ed0 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
22ee0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
22ef0 75 73 65 64 20 69 6e 20 49 4e 20 63 6c 61 75 73  used in IN claus
22f00 65 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  e processing for
22f10 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20   a multi-column 
22f20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e 20 49 4e  key..** If an IN
22f30 20 63 6c 61 75 73 65 20 69 73 20 61 74 74 61 63   clause is attac
22f40 68 65 64 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e  hed to an elemen
22f50 74 20 6f 66 20 74 68 65 20 6b 65 79 20 6f 74 68  t of the key oth
22f60 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 6c  er than the.** l
22f70 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74  eft-most element
22f80 2c 20 61 6e 64 20 69 66 20 74 68 65 72 65 20 61  , and if there a
22f90 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 20 6f 6e  re no matches on
22fa0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
22fb0 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72 20 74 68  .** seek over th
22fc0 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20 74 68 65  e whole key, the
22fd0 6e 20 69 74 20 6d 69 67 68 74 20 62 65 20 74 68  n it might be th
22fe0 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  at one of the ke
22ff0 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20  y element.** to 
23000 74 68 65 20 6c 65 66 74 20 69 73 20 70 72 6f 68  the left is proh
23010 69 62 69 74 69 6e 67 20 61 20 6d 61 74 63 68 2c  ibiting a match,
23020 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65   and hence there
23030 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66   is "no hope" of
23040 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68 20 72 65  .** any match re
23050 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20  gardless of how 
23060 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73 65 20 65  many IN clause e
23070 6c 65 6d 65 6e 74 73 20 61 72 65 20 63 68 65 63  lements are chec
23080 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75 63 68 20  ked..** In such 
23090 61 20 63 61 73 65 2c 20 77 65 20 61 62 61 6e 64  a case, we aband
230a0 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61 75 73 65  on the IN clause
230b0 20 73 65 61 72 63 68 20 65 61 72 6c 79 2c 20 75   search early, u
230c0 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20 6f 70 63  sing this.** opc
230d0 6f 64 65 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  ode.  The opcode
230e0 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d   name comes from
230f0 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 74   the fact that t
23100 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73 20 74 61  he.** jump is ta
23110 6b 65 6e 20 69 66 20 74 68 65 72 65 20 69 73 20  ken if there is 
23120 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20 61 63 68  "no hope" of ach
23130 69 65 76 69 6e 67 20 61 20 6d 61 74 63 68 2e 0a  ieving a match..
23140 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
23150 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 48 69  NotFound, SeekHi
23160 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
23170 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
23180 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
23190 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
231a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
231b0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
231c0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
231d0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
231e0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
231f0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
23200 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
23210 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
23220 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
23230 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
23240 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
23250 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
23260 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
23270 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
23280 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
23290 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
232a0 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
232b0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
232c0 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
232d0 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
232e0 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
232f0 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
23300 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
23310 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
23320 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
23330 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
23340 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
23350 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
23360 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
23370 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
23380 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
23390 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
233a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
233b0 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
233c0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
233d0 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
233e0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
233f0 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
23400 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
23410 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
23420 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
23430 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
23440 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
23450 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
23460 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
23470 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
23480 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
23490 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
234a0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
234b0 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
234c0 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
234d0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
234e0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
234f0 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
23500 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
23510 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
23520 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
23530 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
23540 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
23550 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
23560 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b 20 20 20  P_IfNoHope: {   
23570 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
23580 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
23590 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  pC;.  assert( pO
235a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
235b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
235c0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
235d0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
235e0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
235f0 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 48 69 74   if( pC->seekHit
23600 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
23610 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
23620 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a   OP_NotFound */.
23630 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  }.case OP_NoConf
23640 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
23650 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
23660 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
23670 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
23680 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
23690 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
236a0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
236b0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
236c0 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
236d0 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
236e0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
236f0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
23700 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20  Record *pFree;. 
23710 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
23720 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
23730 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23  ckedRecord r;..#
23740 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
23750 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  T.  if( pOp->opc
23760 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode!=OP_NoConfli
23770 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75  ct ) sqlite3_fou
23780 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
23790 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  if..  assert( pO
237a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
237b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
237c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
237d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
237e0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
237f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23800 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23810 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
23820 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
23830 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
23840 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20  ;.#endif.  pIn3 
23850 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23870 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
23880 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
23890 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
238a0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
238b0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
238c0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
238d0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72  >p4.i>0 ){.    r
238e0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
238f0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
23900 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
23910 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61  p->p4.i;.    r.a
23920 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64  Mem = pIn3;.#ifd
23930 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
23940 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
23950 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  <r.nField; ii++)
23960 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
23970 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
23980 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20  em[ii]) );.     
23990 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d   assert( (r.aMem
239a0 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
239b0 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61  _Zero)==0 || r.a
239c0 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a  Mem[ii].n==0 );.
239d0 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
239e0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
239f0 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
23a00 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  m[ii]);.    }.#e
23a10 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79  ndif.    pIdxKey
23a20 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65   = &r;.    pFree
23a30 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
23a40 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
23a50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
23a60 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  b );.    rc = Ex
23a70 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
23a80 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
23a90 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
23aa0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b  =SQLITE_NOMEM );
23ab0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
23ac0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70  to no_mem;.    p
23ad0 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d  Free = pIdxKey =
23ae0 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
23af0 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
23b00 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20  pC->pKeyInfo);. 
23b10 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
23b20 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
23b30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
23b40 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
23b50 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
23b60 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
23b70 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
23b80 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
23b90 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70   = 0;.  takeJump
23ba0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
23bb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
23bc0 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
23bd0 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
23be0 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
23bf0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
23c00 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
23c10 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
23c20 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
23c30 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
23c40 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
23c50 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
23c60 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
23c70 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b  pIdxKey->nField;
23c80 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
23c90 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b  ( pIdxKey->aMem[
23ca0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
23cb0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
23cc0 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20  takeJump = 1;.  
23cd0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
23ce0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
23cf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23d00 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
23d10 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
23d20 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
23d30 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72  &res);.  if( pFr
23d40 65 65 20 29 20 73 71 6c 69 74 65 33 44 62 46 72  ee ) sqlite3DbFr
23d50 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b  eeNN(db, pFree);
23d60 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
23d70 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f  E_OK ){.    goto
23d80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23d90 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73  ror;.  }.  pC->s
23da0 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
23db0 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
23dc0 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70   = (res==0);.  p
23dd0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61  C->nullRow = 1-a
23de0 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
23df0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23e00 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
23e10 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23e20 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
23e30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
23e40 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65  ound ){.    Vdbe
23e50 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
23e60 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b  adyExists!=0,2);
23e70 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
23e80 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
23e90 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
23ea0 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
23eb0 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c  hTaken(takeJump|
23ec0 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  |alreadyExists==
23ed0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61  0,2);.    if( ta
23ee0 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61  keJump || !alrea
23ef0 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
23f00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
23f10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23f20 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64  pcode: SeekRowid
23f30 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
23f40 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
23f50 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
23f60 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
23f70 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
23f80 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
23f90 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
23fa0 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66  er.** keys).  If
23fb0 20 72 65 67 69 73 74 65 72 20 50 33 20 64 6f 65   register P3 doe
23fc0 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  s not contain an
23fd0 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50   integer or if P
23fe0 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f  1 does not.** co
23ff0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
24000 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
24010 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
24020 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f  ly to P2.  .** O
24030 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72  r, if P2 is 0, r
24040 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43  aise an SQLITE_C
24050 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
24060 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
24070 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74  .** a record wit
24080 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
24090 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75  .** leave the cu
240a0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
240b0 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
240c0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
240d0 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
240e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
240f0 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  The OP_NotExists
24100 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
24110 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
24120 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50  ion, but with OP
24130 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68  _NotExists.** th
24140 65 20 50 33 20 72 65 67 69 73 74 65 72 20 6d 75  e P3 register mu
24150 73 74 20 62 65 20 67 75 61 72 61 6e 74 65 65 64  st be guaranteed
24160 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69   to contain an i
24170 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57  nteger value.  W
24180 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  ith this.** opco
24190 64 65 2c 20 72 65 67 69 73 74 65 72 20 50 33 20  de, register P3 
241a0 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69  might not contai
241b0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
241c0 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
241d0 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
241e0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
241f0 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
24200 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
24210 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
24220 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
24230 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
24240 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24250 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
24260 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
24270 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
24280 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
24290 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
242a0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
242b0 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
242c0 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
242d0 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
242e0 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
242f0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
24300 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
24310 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20  SeekRowid.*/./* 
24320 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
24330 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
24340 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
24350 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
24360 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
24370 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
24380 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
24390 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
243a0 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
243b0 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
243c0 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
243d0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
243e0 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
243f0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
24400 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24410 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32  o P2.  Or, if P2
24420 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a   is 0, raise an.
24430 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ** SQLITE_CORRUP
24440 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
24450 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
24460 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
24470 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76  P3 then .** leav
24480 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
24490 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
244a0 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  cord and fall th
244b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
244c0 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
244d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53  ..**.** The OP_S
244e0 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  eekRowid opcode 
244f0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
24500 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
24510 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a  also allows the.
24520 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72 20 74  ** P3 register t
24530 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d  o contain a non-
24540 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
24550 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
24560 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61   jump is.** alwa
24570 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20  ys taken.  This 
24580 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65 73 20  opcode requires 
24590 74 68 61 74 20 50 33 20 61 6c 77 61 79 73 20 63  that P3 always c
245a0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
245b0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
245c0 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
245d0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
245e0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
245f0 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
24600 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
24610 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
24620 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
24630 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
24640 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
24650 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
24660 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
24670 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
24680 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
24690 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
246a0 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
246b0 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
246c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
246d0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
246e0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
246f0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
24700 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
24710 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f  /.case OP_SeekRo
24720 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  wid: {        /*
24730 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
24740 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24750 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
24760 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
24770 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
24780 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
24790 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
247a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
247b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 4d  )==0 ){.    /* M
247c0 61 6b 65 20 73 75 72 65 20 70 49 6e 33 2d 3e 75  ake sure pIn3->u
247d0 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  .i contains a va
247e0 6c 69 64 20 69 6e 74 65 67 65 72 20 72 65 70 72  lid integer repr
247f0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 20  esentation of.  
24800 20 20 2a 2a 20 74 68 65 20 6b 65 79 20 76 61 6c    ** the key val
24810 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 63  ue, but do not c
24820 68 61 6e 67 65 20 74 68 65 20 64 61 74 61 74 79  hange the dataty
24830 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
24840 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20 6f 74  er, as.    ** ot
24850 68 65 72 20 70 61 72 74 73 20 6f 66 20 74 68 65  her parts of the
24860 20 70 65 72 70 61 72 65 64 20 73 74 61 74 65 6d   perpared statem
24870 65 6e 74 20 6d 69 67 68 74 20 62 65 20 64 65 70  ent might be dep
24880 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 20  ending on the.  
24890 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74    ** current dat
248a0 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 75 31  atype. */.    u1
248b0 36 20 6f 72 69 67 46 6c 61 67 73 20 3d 20 70 49  6 origFlags = pI
248c0 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 69  n3->flags;.    i
248d0 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20 20 20  nt isNotInt;.   
248e0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
248f0 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In3, SQLITE_AFF_
24900 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
24910 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49 6e 74  g);.    isNotInt
24920 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
24930 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b 0a 20  & MEM_Int)==0;. 
24940 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d     pIn3->flags =
24950 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20 20 20   origFlags;.    
24960 69 66 28 20 69 73 4e 6f 74 49 6e 74 20 29 20 67  if( isNotInt ) g
24970 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
24980 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
24990 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f  rough into OP_No
249a0 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20  tExists */.case 
249b0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20  OP_NotExists:   
249c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
249d0 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
249e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
249f0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
24a00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24a10 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  )!=0 || pOp->opc
24a20 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69  ode==OP_SeekRowi
24a30 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
24a40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24a50 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24a60 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24a70 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24a80 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24a90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24aa0 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  BUG.  if( pOp->o
24ab0 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f  pcode==OP_SeekRo
24ac0 77 69 64 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70  wid ) pC->seekOp
24ad0 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3b   = OP_SeekRowid;
24ae0 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74  .#endif.  assert
24af0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
24b00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
24b10 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
24b20 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
24b30 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
24b40 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
24b50 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20  rsr!=0 );.  res 
24b60 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49  = 0;.  iKey = pI
24b70 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20  n3->u.i;.  rc = 
24b80 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
24b90 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
24ba0 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
24bb0 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  es);.  assert( r
24bc0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
24bd0 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  res==0 );.  pC->
24be0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
24bf0 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
24c00 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
24c10 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
24c20 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24c30 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24c40 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
24c50 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64  Moveto = 0;.  Vd
24c60 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
24c70 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73  s!=0,2);.  pC->s
24c80 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
24c90 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
24ca0 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
24cb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
24cc0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
24cd0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
24ce0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
24cf0 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
24d00 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
24d10 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
24d20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
24d30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
24d40 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
24d50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
24d60 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
24d70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
24d80 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  2]=cursor[P1].ct
24d90 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  r++.**.** Find t
24da0 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
24db0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
24dc0 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
24dd0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
24de0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
24df0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
24e00 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
24e10 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
24e20 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
24e30 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
24e40 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
24e50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
24e60 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
24e70 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
24e80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24e90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24ea0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
24eb0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
24ec0 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61  p->p1]!=0 );.  a
24ed0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
24ee0 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
24ef0 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
24f00 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
24f10 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
24f20 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
24f30 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24f40 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  >p1]->seqCount++
24f50 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
24f60 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77  * Opcode: NewRow
24f70 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
24f80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
24f90 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47  2]=rowid.**.** G
24fa0 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
24fb0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
24fc0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
24fd0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
24fe0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
24ff0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
25000 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
25010 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
25020 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
25030 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
25040 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
25050 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
25060 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
25070 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
25080 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
25090 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
250a0 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
250b0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
250c0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
250d0 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
250e0 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
250f0 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
25100 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
25110 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
25120 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
25130 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
25140 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
25150 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
25160 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
25170 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
25180 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
25190 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
251a0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
251b0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
251c0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
251d0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
251e0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
251f0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
25200 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
25210 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
25220 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
25230 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
25240 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
25250 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ut2 */.  i64 v; 
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
25280 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25290 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
252a0 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
252b0 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
252c0 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
252d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
252e0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
252f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
25300 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
25310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25320 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
25330 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
25340 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
25350 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
25360 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
25370 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
25380 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
25390 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
253a0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
253b0 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
253c0 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
253d0 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
253e0 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  = 0;.  pOut = ou
253f0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
25400 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
25410 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25420 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25430 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25440 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25450 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25460 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
25470 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
25480 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
25490 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
254a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
254b0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
254c0 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65  ;.  {.    /* The
254d0 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
254e0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
254f0 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
25500 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
25510 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
25520 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
25530 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
25540 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
25550 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
25560 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
25570 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
25580 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
25590 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
255a0 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
255b0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
255c0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
255d0 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
255e0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
255f0 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
25600 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
25610 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
25620 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
25630 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
25640 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
25650 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
25660 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
25670 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
25680 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
25690 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
256a0 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
256b0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
256c0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
256d0 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
256e0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
256f0 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
25700 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
25710 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
25720 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
25730 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
25740 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
25750 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
25760 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
25770 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
25780 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
25790 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
257a0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
257b0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
257c0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
257d0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
257e0 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
257f0 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
25800 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
25810 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
25820 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
25830 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
25840 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
25850 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
25860 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
25870 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
25880 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
25890 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
258a0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
258b0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
258c0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
258d0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
258e0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
258f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25900 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63  BtreeLast(pC->uc
25910 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
25920 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
25930 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
25940 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
25950 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
25960 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
25970 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  es ){.        v 
25980 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  = 1;   /* IMP: R
25990 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a  -61914-48074 */.
259a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
259b0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
259c0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
259d0 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43  sValid(pC->uc.pC
259e0 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
259f0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
25a00 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
25a10 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
25a20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
25a30 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
25a40 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
25a50 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
25a60 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25a70 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
25a80 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
25a90 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  7 */.        }. 
25aa0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69       }.    }..#i
25ab0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25ac0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
25ad0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
25ae0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65  ){.      /* Asse
25af0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
25b00 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
25b10 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  l. */.      asse
25b20 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
25b30 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46  .      if( p->pF
25b40 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
25b50 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
25b60 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
25b70 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
25b80 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
25b90 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
25ba0 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
25bb0 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
25bc0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
25bd0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
25be0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
25bf0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
25c00 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
25c10 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  p3];.      }else
25c20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
25c30 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
25c40 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
25c50 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
25c60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
25c70 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
25c80 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
25c90 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
25ca0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
25cb0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
25cc0 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
25cd0 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
25ce0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
25cf0 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
25d00 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
25d10 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
25d20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
25d30 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
25d40 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
25d50 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
25d60 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
25d70 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
25d80 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
25d90 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
25da0 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
25db0 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
25dc0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
25dd0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
25de0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37  ;   /* IMP: R-17
25df0 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20  817-00630 */.   
25e00 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
25e10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25e20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
25e30 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
25e40 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
25e50 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
25e60 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
25e70 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
25e80 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
25e90 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
25ea0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
25eb0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
25ec0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
25ed0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
25ee0 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
25ef0 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
25f00 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
25f10 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
25f20 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
25f30 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
25f40 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
25f50 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
25f60 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
25f70 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
25f80 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
25f90 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
25fa0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
25fb0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
25fc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25fd0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
25fe0 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
25ff0 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
26000 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
26030 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
26040 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
26050 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
26060 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
26070 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
26080 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
26090 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
260a0 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e  >1); v++;  /* En
260b0 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67  sure that v is g
260c0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
260d0 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65   */.      }while
260e0 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65  (  ((rc = sqlite
260f0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
26100 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
26110 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
26160 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
26170 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
26180 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
26190 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20  +cnt<100));.    
261a0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
261b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
261c0 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65  or;.      if( re
261d0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
261e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
261f0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
26200 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
26210 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
26220 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26230 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
26240 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
26250 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
26260 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
26270 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26280 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
26290 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
262a0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
262b0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
262c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
262d0 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
262e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
262f0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
26300 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
26310 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
26320 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
26330 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
26340 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
26350 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
26360 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
26370 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
26380 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
26390 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
263a0 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
263b0 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
263c0 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
263d0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
263e0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
263f0 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
26400 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
26410 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
26420 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
26430 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
26440 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
26450 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
26460 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
26470 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
26480 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
26490 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
264a0 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
264b0 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
264c0 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
264d0 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
264e0 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
264f0 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
26500 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
26510 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
26520 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
26530 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
26540 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
26550 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26560 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
26570 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65  s set, the imple
26580 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a  mentation might.
26590 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79  ** run faster by
265a0 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e   avoiding an unn
265b0 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e  ecessary seek on
265c0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77   cursor P1.  How
265d0 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46  ever,.** the OPF
265e0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
265f0 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79  T flag must only
26600 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65   be set if there
26610 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72   have been no pr
26620 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20  ior.** seeks on 
26630 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66  the cursor or if
26640 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
26650 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79   seek used a key
26660 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a   equal to P3..**
26670 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
26680 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
26690 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
266a0 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
266b0 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
266c0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
266d0 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
266e0 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
266f0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
26700 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
26710 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
26720 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
26730 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
26740 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
26750 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
26760 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
26770 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62  y point to a Tab
26780 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72  le structure, or
26790 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
267a0 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e   it is .** not N
267b0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
267c0 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74  date-hook (sqlit
267d0 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
267e0 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a  ck) is invoked .
267f0 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ** following a s
26800 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
26810 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
26820 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
26830 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
26840 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
26850 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
26860 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
26870 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
26880 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
26890 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
268a0 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
268b0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
268c0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
268d0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
268e0 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
268f0 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
26900 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
26910 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
26920 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
26930 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
26940 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
26950 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
26960 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
26970 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
26980 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
26990 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
269a0 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
269b0 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
269c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
269d0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
269e0 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
269f0 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
26a00 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
26a10 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
26a20 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
26a30 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
26a40 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
26a50 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
26a60 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
26a70 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
26a80 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
26a90 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
26aa0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
26ab0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
26ac0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
26ad0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
26ae0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
26af0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
26b00 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
26b10 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
26b20 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
26b30 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26b40 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74  C;   /* Cursor t
26b50 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69  o table into whi
26b60 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69  ch insert is wri
26b70 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65  tten */.  int se
26b80 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
26b90 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
26ba0 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
26bb0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
26bc0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
26bd0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
26be0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
26bf0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
26c00 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ook */.  Table *
26c10 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61  pTab;      /* Ta
26c20 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20  ble structure - 
26c30 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61  used by update a
26c40 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  nd pre-update ho
26c50 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50 61  oks */.  BtreePa
26c60 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61  yload x;   /* Pa
26c70 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65  yload to be inse
26c80 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74 61  rted */..  pData
26c90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
26ca0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
26cb0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26cc0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26cd0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
26ce0 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a  Valid(pData) );.
26cf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26d00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26d10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
26d20 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
26d30 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
26d40 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
26d50 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
26d60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
26d70 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
26d80 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e  _ISNOOP) || pC->
26d90 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
26da0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
26db0 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f  ==P4_TABLE || pO
26dc0 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54  p->p4type>=P4_ST
26dd0 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54  ATIC );.  REGIST
26de0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
26df0 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c 69  , pData);.  sqli
26e00 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
26e10 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
26e20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
26e30 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
26e40 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
26e50 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
26e60 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
26e70 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
26e80 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
26e90 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
26ea0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
26eb0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
26ec0 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d  y);.    x.nKey =
26ed0 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
26ee0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
26ef0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26f00 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
26f10 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e    x.nKey = pOp->
26f20 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
26f30 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
26f40 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41  ABLE && HAS_UPDA
26f50 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20  TE_HOOK(db) ){. 
26f60 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
26f70 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62  Db>=0 );.    zDb
26f80 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
26f90 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20  Db].zDbSName;.  
26fa0 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34    pTab = pOp->p4
26fb0 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72  .pTab;.    asser
26fc0 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  t( (pOp->p5 & OP
26fd0 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20  FLAG_ISNOOP) || 
26fe0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
26ff0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
27000 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a 44 62  Tab = 0;.    zDb
27010 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
27020 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
27030 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
27040 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
27050 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
27060 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
27070 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
27080 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
27090 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20  if any */.  if( 
270a0 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66 28 20  pTab ){.    if( 
270b0 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
270c0 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f 70 2d  llback && !(pOp-
270d0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
270e0 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20 20 20  PDATE) ){.      
270f0 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
27100 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20  dateHook(p, pC, 
27110 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a  SQLITE_INSERT, z
27120 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79  Db, pTab, x.nKey
27130 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 7d  ,pOp->p2);.    }
27140 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70  .    if( db->xUp
27150 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d 30 20  dateCallback==0 
27160 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d 3d 30  || pTab->aCol==0
27170 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50 72 65   ){.      /* Pre
27180 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61 74 65  vent post-update
27190 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e 6e 69   hook from runni
271a0 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68 65 6e  ng in cases when
271b0 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 2a   it should not *
271c0 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 30  /.      pTab = 0
271d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
271e0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
271f0 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
27200 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  k;.#endif..  if(
27210 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
27220 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
27230 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
27240 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27250 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
27260 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e  >lastRowid = x.n
27270 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Key;.  assert( p
27280 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
27290 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
272a0 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d 20   );.  x.pData = 
272b0 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e 44  pData->z;.  x.nD
272c0 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a  ata = pData->n;.
272d0 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
272e0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
272f0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
27300 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
27310 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
27320 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
27330 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e  _Zero ){.    x.n
27340 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
27350 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
27360 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b      x.nZero = 0;
27370 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20  .  }.  x.pKey = 
27380 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
27390 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
273a0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
273b0 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20  .      (pOp->p5 
273c0 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
273d0 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
273e0 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75  TION)), seekResu
273f0 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
27400 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
27410 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
27420 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27430 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
27440 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
27450 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
27460 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
27470 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
27480 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29  or;.  if( pTab )
27490 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
274a0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
274b0 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  k!=0 );.    asse
274c0 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c 21 3d  rt( pTab->aCol!=
274d0 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  0 );.    db->xUp
274e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
274f0 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20 20 20  >pUpdateArg,.   
27500 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
27510 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
27520 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
27530 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
27540 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ERT,.           
27550 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
27560 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20  , x.nKey);.  }. 
27570 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27580 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
27590 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
275a0 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
275b0 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
275c0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
275d0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
275e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
275f0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
27600 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50 35  ON bit of the P5
27610 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65   parameter is se
27620 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  t, then.** the c
27630 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
27640 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20  ft pointing at  
27650 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
27660 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
27670 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
27680 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
27690 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
276a0 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
276b0 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
276c0 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
276d0 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
276e0 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c  o-op. As a resul
276f0 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a  t, in this case.
27700 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64  ** it is ok to d
27710 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20 66  elete a record f
27720 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78  rom within a Nex
27730 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f  t loop. If .** O
27740 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
27750 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  ON bit of P5 is 
27760 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20  clear, then the 
27770 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a  cursor will be.*
27780 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64  * left in an und
27790 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a  efined state..**
277a0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
277b0 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74 20  G_AUXDELETE bit 
277c0 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68  is set on P5, th
277d0 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  at indicates tha
277e0 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65  t this.** delete
277f0 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20   one of several 
27800 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
27810 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65  deleting a table
27820 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73   row and all its
27830 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69  .** associated i
27840 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45  ndex entries.  E
27850 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
27860 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73 20 74  ose deletes is t
27870 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20  he "primary".** 
27880 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68  delete.  The oth
27890 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f  ers are all on O
278a0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
278b0 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20  cursors or else 
278c0 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69  are.** marked wi
278d0 74 68 20 74 68 65 20 41 55 58 44 45 4c 45 54 45  th the AUXDELETE
278e0 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   flag..**.** If 
278f0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
27900 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e  GE flag of P2 (N
27910 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73  B: P2 not P5) is
27920 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
27930 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  ow.** change cou
27940 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
27950 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
27960 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
27970 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
27980 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
27990 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
279a0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
279b0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
279c0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
279d0 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74  then it points t
279e0 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  o a Table object
279f0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 65  . In this case e
27a00 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70  ither .** the up
27a10 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61  date or pre-upda
27a20 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68  te hook, or both
27a30 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64  , may be invoked
27a40 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  . The P1 cursor 
27a50 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  must.** have bee
27a60 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69  n positioned usi
27a70 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
27a80 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
27a90 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20   this opcode in 
27aa0 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53  .** this case. S
27ab0 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20  pecifically, if 
27ac0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
27ad0 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  d, the pre-updat
27ae0 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e  e hook is .** in
27af0 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e  voked if P4 is n
27b00 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64  ot NULL. The upd
27b10 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f  ate-hook is invo
27b20 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ked if one is co
27b30 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34  nfigured, .** P4
27b40 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e   is not NULL, an
27b50 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  d the OPFLAG_NCH
27b60 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65 74  ANGE flag is set
27b70 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   in P2..**.** If
27b80 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
27b90 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
27ba0 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20   in P2, then P3 
27bb0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
27bc0 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d  ress.** of the m
27bd0 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
27be0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c  contains the val
27bf0 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77 69  ue that the rowi
27c00 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c  d of the row wil
27c10 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62  l.** be set to b
27c20 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f  y the update..*/
27c30 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
27c40 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27c50 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *pC;.  const cha
27c60 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20  r *zDb;.  Table 
27c70 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66  *pTab;.  int opf
27c80 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73  lags;..  opflags
27c90 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
27ca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27cb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27cc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27cd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27ce0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27cf0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27d00 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27d10 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
27d20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
27d30 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
27d40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27d50 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27d60 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
27d70 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
27d80 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65 66 20  p, pC);..#ifdef 
27d90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
27da0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
27db0 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52  P4_TABLE && HasR
27dc0 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61  owid(pOp->p4.pTa
27dd0 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  b) && pOp->p5==0
27de0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35   ){.    /* If p5
27df0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65   is zero, the se
27e00 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
27e10 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
27e20 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
27e30 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74  .    ** OP_Delet
27e40 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f  e will have also
27e50 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
27e60 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
27e70 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  to the rowid of.
27e80 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74      ** the row t
27e90 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c  hat is being del
27ea0 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20  eted */.    i64 
27eb0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74  iKey = sqlite3Bt
27ec0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
27ed0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
27ee0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
27ef0 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
27f00 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
27f10 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
27f20 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
27f30 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
27f40 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
27f50 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
27f60 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
27f70 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
27f80 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
27f90 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
27fa0 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
27fb0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
27fc0 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
27fd0 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
27fe0 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
27ff0 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
28000 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
28010 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
28020 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
28030 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
28040 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
28050 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
28060 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
28070 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
28080 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
28090 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
280a0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
280b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
280c0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
280d0 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
280e0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
280f0 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
28100 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
28110 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
28120 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
28130 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
28140 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
28150 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
28160 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74  rget = sqlite3Bt
28170 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
28180 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
28190 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
281a0 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20    zDb = 0;   /* 
281b0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
281c0 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
281d0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
281e0 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  pTab = 0;  /* No
281f0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
28200 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
28210 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
28220 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28230 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
28240 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
28250 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  he pre-update-ho
28260 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
28270 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
28280 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
28290 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20  && pOp->p4.pTab 
282a0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
282b0 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
282c0 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20  G_ISUPDATE) .   
282d0 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69        || HasRowi
282e0 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20  d(pTab)==0 .    
282f0 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f       || (aMem[pO
28300 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p3].flags & M
28310 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a  EM_Int) .    );.
28320 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
28330 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
28340 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
28350 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
28360 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
28370 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
28380 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
28390 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d    zDb, pTab, pC-
283a0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20  >movetoTarget,. 
283b0 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20         pOp->p3. 
283c0 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20     );.  }.  if( 
283d0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
283e0 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
283f0 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f  .#endif. .  /* O
28400 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63  nly flags that c
28410 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41  an be set are SA
28420 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41  VEPOISTION and A
28430 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61  UXDELETE */ .  a
28440 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
28450 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50  & ~(OPFLAG_SAVEP
28460 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41  OSITION|OPFLAG_A
28470 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b  UXDELETE))==0 );
28480 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
28490 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d  G_SAVEPOSITION==
284a0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
284b0 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ON );.  assert( 
284c0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
284d0 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  ==BTREE_AUXDELET
284e0 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  E );..#ifdef SQL
284f0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
28500 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a  p->pFrame==0 ){.
28510 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70      if( pC->isEp
28520 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20  hemeral==0.     
28530 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26     && (pOp->p5 &
28540 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
28550 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  E)==0.        &&
28560 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f   (pC->wrFlag & O
28570 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
28580 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
28590 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b     nExtraDelete+
285a0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
285b0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
285c0 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
285d0 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d     nExtraDelete-
285e0 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  -;.    }.  }.#en
285f0 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  dif..  rc = sqli
28600 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
28610 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
28620 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63  Op->p5);.  pC->c
28630 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28640 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
28650 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
28660 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28670 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28680 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  or;..  /* Invoke
28690 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
286a0 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
286b0 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
286c0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
286d0 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
286e0 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  e++;.    if( db-
286f0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
28700 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
28710 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  b) ){.      db->
28720 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
28730 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
28740 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
28750 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
28760 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d  .          pC->m
28770 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
28780 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28790 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  iDb>=0 );.    }.
287a0 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
287b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
287c0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
287d0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
287e0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
287f0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
28800 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
28810 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
28820 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
28830 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
28840 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
28850 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
28860 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
28870 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
28880 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
28890 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
288a0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
288b0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
288c0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
288d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
288e0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
288f0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
28900 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
28910 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28920 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
28930 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
28940 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79  Synopsis: if key
28950 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
28960 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
28970 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
28980 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
28990 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
289a0 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
289b0 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
289c0 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
289d0 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
289e0 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
289f0 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
28a00 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
28a10 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
28a20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
28a30 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
28a40 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
28a50 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
28a60 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
28a70 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
28a80 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
28a90 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
28aa0 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
28ab0 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
28ac0 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
28ad0 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
28ae0 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
28af0 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
28b00 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
28b10 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
28b20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
28b30 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
28b40 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
28b50 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
28b60 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
28b70 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
28b80 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
28b90 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
28ba0 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
28bb0 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
28bc0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
28bd0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
28be0 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
28bf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
28c00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28c10 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
28c20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28c30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
28c40 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
28c50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28c60 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
28c70 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
28c80 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
28c90 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
28ca0 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
28cb0 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
28cc0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
28cd0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
28ce0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28cf0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
28d00 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
28d10 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
28d20 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
28d30 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
28d40 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
28d50 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
28d60 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
28d70 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
28d80 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
28d90 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
28da0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
28db0 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
28dc0 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
28dd0 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
28de0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28df0 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
28e00 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
28e10 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
28e20 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
28e30 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
28e40 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
28e50 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
28e60 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
28e70 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
28e80 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
28e90 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
28ea0 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
28eb0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
28ec0 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
28ed0 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
28ee0 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
28ef0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
28f00 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
28f10 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
28f20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
28f30 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
28f40 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
28f50 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
28f60 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
28f70 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
28f80 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
28f90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
28fa0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28fb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28fc0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28fd0 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
28fe0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
28ff0 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
29000 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
29010 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
29020 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
29030 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
29040 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29050 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29060 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
29070 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
29080 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
29090 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
290a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
290b0 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
290c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
290d0 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33  RowData P1 P2 P3
290e0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
290f0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
29100 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
29110 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
29120 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65  mplete row conte
29130 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61  nt for the row a
29140 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73  t .** which curs
29150 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
29160 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20  ly pointing..** 
29170 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
29180 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
29190 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
291a0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
291b0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
291c0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
291d0 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
291e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
291f0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  ile..**.** If cu
29200 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e  rsor P1 is an in
29210 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  dex, then the co
29220 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79  ntent is the key
29230 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20   of the row..** 
29240 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20  If cursor P2 is 
29250 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  a table, then th
29260 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63  e content extrac
29270 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e  ted is the data.
29280 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
29290 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
292a0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
292b0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
292c0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
292d0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
292e0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
292f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
29300 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
29310 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
29320 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  ake an ephemeral
29330 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f   pointer.** into
29340 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
29350 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 20  ge.  That means 
29360 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  that the content
29370 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a   of the output.*
29380 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c 20  * register will 
29390 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 61  be invalidated a
293a0 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 75  s soon as the cu
293b0 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63  rsor moves - inc
293c0 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20  luding.** moves 
293d0 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72 20  caused by other 
293e0 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73 61  cursors that "sa
293f0 76 65 22 20 74 68 65 20 63 75 72 72 65 6e 74 20  ve" the current 
29400 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74  cursors.** posit
29410 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68 61  ion in order tha
29420 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74 65  t they can write
29430 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62   to the same tab
29440 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a  le.  If P3==0.**
29450 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66 20   then a copy of 
29460 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64 65  the data is made
29470 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50   into memory.  P
29480 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c 20  3!=0 is faster, 
29490 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20  but.** P3==0 is 
294a0 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  safer..**.** If 
294b0 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63  P3!=0 then the c
294c0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50 32  ontent of the P2
294d0 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e 73   register is uns
294e0 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 0a  uitable for use.
294f0 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20  ** in OP_Result 
29500 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c  and any OP_Resul
29510 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74  t will invalidat
29520 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  e the P2 registe
29530 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68  r content..** Th
29540 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f  e P2 register co
29550 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69 64  ntent is invalid
29560 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73 20  ated by opcodes 
29570 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  like OP_Function
29580 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73   or.** by any us
29590 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75 72  e of another cur
295a0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
295b0 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a  the same table..
295c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  */.case OP_RowDa
295d0 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
295e0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
295f0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
29600 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75   n;..  pOut = ou
29610 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
29620 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  pOp);..  assert(
29630 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29640 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29650 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29660 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29670 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29680 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29690 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
296a0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
296b0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
296c0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
296d0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
296e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
296f0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
29700 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
29710 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  >uc.pCursor;..  
29720 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61 74  /* The OP_RowDat
29730 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73  a opcodes always
29740 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78   follow OP_NotEx
29750 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  ists or.  ** OP_
29760 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f  SeekRowid or OP_
29770 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77  Rewind/Op_Next w
29780 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69  ith no interveni
29790 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a  ng instructions.
297a0 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20    ** that might 
297b0 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
297c0 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74  ursor..  ** If t
297d0 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68  his where not th
297e0 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68  e case, on of th
297f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
29800 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64  rt()s.  ** would
29810 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74   fail.  Should t
29820 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20  his ever change 
29830 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e  (because of chan
29840 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a  ges in the code.
29850 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20    ** generator) 
29860 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75  then the fix wou
29870 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20  ld be to insert 
29880 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  a call to.  ** s
29890 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
298a0 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20  Moveto()..  */. 
298b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
298c0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
298d0 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
298e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
298f0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
29900 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65  #if 0  /* Not re
29910 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68  quired due to th
29920 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73  e previous to as
29930 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
29940 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  s */.  rc = sqli
29950 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
29960 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
29970 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
29980 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29990 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
299a0 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72    n = sqlite3Btr
299b0 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43  eePayloadSize(pC
299c0 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75  rsr);.  if( n>(u
299d0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
299e0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
299f0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
29a00 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65  oo_big;.  }.  te
29a10 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a  stcase( n==0 );.
29a20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29a30 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
29a40 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
29a50 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
29a60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29a70 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f  error;.  if( !pO
29a80 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d 65  p->p3 ) Deepheme
29a90 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
29aa0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
29ab0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
29ac0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
29ad0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
29ae0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29af0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
29b00 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
29b10 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
29b20 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
29b30 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
29b40 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
29b50 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
29b60 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
29b70 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
29b80 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
29b90 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
29ba0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
29bb0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
29bc0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
29bd0 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
29be0 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
29bf0 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
29c00 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
29c10 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
29c20 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
29c30 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
29c40 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
29c50 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
29c80 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
29c90 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
29ca0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
29cb0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
29cc0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
29cd0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
29ce0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
29cf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29d00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29d10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29d20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29d30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29d40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
29d50 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
29d60 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
29d70 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
29d80 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
29d90 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
29da0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
29db0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
29dc0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
29dd0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
29de0 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
29df0 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
29e00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29e10 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
29e20 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
29e30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
29e40 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
29e50 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
29e60 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
29e70 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
29e80 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
29e90 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
29ea0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
29eb0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
29ec0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
29ed0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
29ee0 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
29ef0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
29f00 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
29f10 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
29f20 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29f30 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
29f40 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
29f50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
29f60 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
29f70 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
29f80 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
29f90 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
29fa0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
29fb0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
29fc0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
29fd0 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
29fe0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
29ff0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2a000 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
2a010 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2a020 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a030 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
2a040 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
2a050 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
2a060 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
2a070 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
2a080 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
2a090 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2a0a0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
2a0b0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2a0c0 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
2a0d0 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
2a0e0 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
2a0f0 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
2a100 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
2a110 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
2a120 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
2a130 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
2a140 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
2a150 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
2a160 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2a170 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
2a180 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a190 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a1a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2a1b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2a1c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2a1d0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2a1e0 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
2a1f0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2a200 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
2a210 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2a220 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
2a230 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2a240 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
2a250 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2a260 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2a270 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69 66 64  ursor);.  }.#ifd
2a280 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2a290 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 4f 70    if( pC->seekOp
2a2a0 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70  ==0 ) pC->seekOp
2a2b0 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a 23   = OP_NullRow;.#
2a2c0 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
2a2d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
2a2e0 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  kEnd P1 * * * *.
2a2f0 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63  **.** Position c
2a300 75 72 73 6f 72 20 50 31 20 61 74 20 74 68 65 20  ursor P1 at the 
2a310 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65  end of the btree
2a320 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
2a330 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67   of.** appending
2a340 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74   a new entry ont
2a350 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a  o the btree..**.
2a360 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  ** It is assumed
2a370 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
2a380 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f   is used only fo
2a390 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20  r appending and 
2a3a0 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  so.** if the cur
2a3b0 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68  sor is valid, th
2a3c0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
2a3d0 73 74 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f  st already be po
2a3e0 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  inting.** at the
2a3f0 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
2a400 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e  e and so no chan
2a410 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a  ges are made to.
2a420 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a  ** the cursor..*
2a430 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  /./* Opcode: Las
2a440 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2a450 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
2a460 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
2a470 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
2a480 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
2a490 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
2a4a0 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
2a4b0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
2a4c0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2a4d0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
2a4e0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2a4f0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
2a500 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
2a510 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
2a520 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
2a530 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2a540 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
2a550 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
2a560 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
2a570 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
2a580 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a590 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
2a5a0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
2a5b0 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
2a5c0 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
2a5d0 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
2a5e0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
2a5f0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2a600 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
2a610 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
2a620 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
2a630 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  t..*/.case OP_Se
2a640 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c  ekEnd:.case OP_L
2a650 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
2a660 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2a670 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2a680 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2a690 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
2a6a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2a6b0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2a6c0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2a6d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2a6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2a6f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2a700 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2a710 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2a720 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2a730 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
2a740 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
2a750 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  sr!=0 );.#ifdef 
2a760 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2a770 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
2a780 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
2a790 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2a7a0 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b  e==OP_SeekEnd ){
2a7b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2a7c0 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70  ->p2==0 );.    p
2a7d0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2a7e0 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  -1;.    if( sqli
2a7f0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
2a800 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29  ValidNN(pCrsr) )
2a810 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
2a820 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
2a830 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
2a840 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
2a850 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
2a860 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
2a870 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
2a880 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2a890 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2a8a0 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  E;.  if( rc ) go
2a8b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2a8c0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  error;.  if( pOp
2a8d0 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64  ->p2>0 ){.    Vd
2a8e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2a8f0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2a900 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2a910 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
2a920 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a930 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20  e: IfSmaller P1 
2a940 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2a950 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d  Estimate the num
2a960 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2a970 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75  he table P1.  Ju
2a980 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 61 74  mp to P2 if that
2a990 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20  .** estimate is 
2a9a0 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78  less than approx
2a9b0 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a  imately 2**(0.1*
2a9c0 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3)..*/.case OP_
2a9d0 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20  IfSmaller: {    
2a9e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2a9f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2aa00 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2aa10 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
2aa20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65   i64 sz;..  asse
2aa30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2aa40 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2aa50 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2aa60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2aa70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2aa80 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
2aa90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2aaa0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
2aab0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2aac0 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
2aad0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2aae0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2aaf0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2ab00 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2ab10 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72   sz = sqlite3Btr
2ab20 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43  eeRowCountEst(pC
2ab30 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c  rsr);.    if( AL
2ab40 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73  WAYS(sz>=0) && s
2ab50 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36  qlite3LogEst((u6
2ab60 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20  4)sz)<pOp->p3 ) 
2ab70 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56  res = 1;.  }.  V
2ab80 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2ab90 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
2aba0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
2abb0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2abc0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
2abd0 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50 32 20  orterSort P1 P2 
2abe0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65  * * *.**.** Afte
2abf0 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61  r all records ha
2ac00 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64  ve been inserted
2ac10 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72   into the Sorter
2ac20 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74   object.** ident
2ac30 69 66 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76  ified by P1, inv
2ac40 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
2ac50 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74  to actually do t
2ac60 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a  he sorting..** J
2ac70 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
2ac80 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
2ac90 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a  s to be sorted..
2aca0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2acb0 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e is an alias fo
2acc0 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50  r OP_Sort and OP
2acd0 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69 73 20  _Rewind that is 
2ace0 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74  used.** for Sort
2acf0 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f  er objects..*/./
2ad00 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
2ad10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2ad20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
2ad30 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
2ad40 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
2ad50 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
2ad60 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
2ad70 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
2ad80 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
2ad90 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
2ada0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
2adb0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
2adc0 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
2add0 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
2ade0 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
2adf0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
2ae00 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
2ae10 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
2ae20 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
2ae30 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
2ae40 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
2ae50 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
2ae60 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
2ae70 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
2ae80 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
2ae90 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
2aea0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
2aeb0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
2aec0 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
2aed0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
2aee0 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
2aef0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
2af00 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
2af10 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
2af20 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
2af30 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2af40 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
2af50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
2af60 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2af70 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
2af80 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
2af90 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
2afa0 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
2afb0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
2afc0 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
2afd0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
2afe0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
2aff0 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
2b000 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
2b010 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68   * * P5.**.** Th
2b020 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
2b030 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
2b040 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75  n or Next instru
2b050 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
2b060 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
2b070 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69  he first entry i
2b080 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
2b090 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
2b0a0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
2b0b0 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
2b0c0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
2b0d0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
2b0e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2b0f0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
2b100 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2b110 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   the following .
2b120 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2b130 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2b140 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68 65 20  on-zero and the 
2b150 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 65 6d 70  table is not emp
2b160 74 79 2c 20 74 68 65 6e 20 74 68 65 20 22 73 6b  ty, then the "sk
2b170 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66 6c 61 67  ip-next".** flag
2b180 20 69 73 20 73 65 74 20 6f 6e 20 74 68 65 20 63   is set on the c
2b190 75 72 73 6f 72 20 73 6f 20 74 68 61 74 20 74 68  ursor so that th
2b1a0 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78 74 20 69  e next OP_Next i
2b1b0 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a 2a 20 65  nstruction .** e
2b1c0 78 65 63 75 74 65 64 20 6f 6e 20 69 74 20 69 73  xecuted on it is
2b1d0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20   a no-op..**.** 
2b1e0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
2b1f0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
2b200 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
2b210 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
2b220 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
2b230 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
2b240 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
2b250 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
2b260 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
2b270 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
2b280 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a  t, not Prev..*/.
2b290 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
2b2a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2b2b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2b2c0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2b2d0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2b2e0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
2b2f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2b300 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2b310 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2b320 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2b330 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2b340 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
2b350 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
2b360 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
2b370 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
2b380 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  1;.#ifdef SQLITE
2b390 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
2b3a0 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b  kOp = OP_Rewind;
2b3b0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73  .#endif.  if( is
2b3c0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2b3d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2b3e0 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70  beSorterRewind(p
2b3f0 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
2b400 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2b410 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2b420 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2b430 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2b440 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  .pCursor;.    as
2b450 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
2b460 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2b470 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
2b480 20 26 72 65 73 29 3b 0a 23 69 66 6e 64 65 66 20   &res);.#ifndef 
2b490 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
2b4a0 4f 57 46 55 4e 43 0a 20 20 20 20 69 66 28 20 70  OWFUNC.    if( p
2b4b0 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69 74 65 33  Op->p5 ) sqlite3
2b4c0 42 74 72 65 65 53 6b 69 70 4e 65 78 74 28 70 43  BtreeSkipNext(pC
2b4d0 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  rsr);.#endif.   
2b4e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2b4f0 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
2b500 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2b510 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
2b520 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2b530 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b540 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  or;.  pC->nullRo
2b550 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
2b560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
2b570 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
2b580 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Op );.  VdbeBran
2b590 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
2b5a0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
2b5b0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2b5c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2b5d0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
2b5e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2b5f0 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
2b600 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
2b610 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
2b620 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
2b630 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
2b640 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
2b650 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
2b660 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
2b670 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
2b680 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
2b690 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
2b6a0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
2b6b0 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
2b6c0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
2b6d0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
2b6e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
2b6f0 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
2b700 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
2b710 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c  owing an SeekGT,
2b720 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekGE, or.** O
2b730 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20  P_Rewind opcode 
2b740 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
2b750 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65   the cursor.  Ne
2b760 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  xt is not allowe
2b770 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
2b780 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2b790 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a  r OP_Last..**.**
2b7a0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
2b7b0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
2b7c0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
2b7d0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31  seudo-table.  P1
2b7e0 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65   must have.** be
2b7f0 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20  en opened prior 
2b800 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f  to this opcode o
2b810 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  r the program wi
2b820 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a  ll segfault..**.
2b830 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2b840 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2b850 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2b860 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2b870 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2b880 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2b890 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2b8a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2b8b0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2b8c0 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2b8d0 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2b8e0 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2b8f0 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2b900 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2b910 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2b920 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2b930 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2b940 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2b950 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2b960 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
2b970 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
2b980 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2b990 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2b9a0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2b9b0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2b9c0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2b9d0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2b9e0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2b9f0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2ba00 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Prev.*/./* Opcod
2ba10 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
2ba20 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
2ba30 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
2ba40 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
2ba50 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
2ba60 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
2ba70 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
2ba80 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
2ba90 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
2baa0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
2bab0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
2bac0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
2bad0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
2bae0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
2baf0 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
2bb00 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
2bb10 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
2bb20 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
2bb30 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
2bb40 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
2bb50 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
2bb60 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
2bb70 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
2bb80 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
2bb90 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
2bba0 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
2bbb0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
2bbc0 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
2bbd0 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
2bbe0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
2bbf0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
2bc00 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
2bc10 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
2bc20 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
2bc30 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
2bc40 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
2bc50 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
2bc60 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
2bc70 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
2bc80 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2bc90 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
2bca0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
2bcb0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
2bcc0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
2bcd0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
2bce0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
2bcf0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
2bd00 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
2bd10 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
2bd20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
2bd30 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
2bd40 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
2bd50 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
2bd60 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
2bd70 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
2bd80 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
2bd90 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2bda0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
2bdb0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
2bdc0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2bdd0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
2bde0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
2bdf0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
2be00 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
2be10 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
2be20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2be30 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20  terNext P1 P2 * 
2be40 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  * P5.**.** This 
2be50 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
2be60 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
2be70 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75  xcept that P1 mu
2be80 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65  st be a.** sorte
2be90 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69  r object for whi
2bea0 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72  ch the OP_Sorter
2beb0 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20  Sort opcode has 
2bec0 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  been.** invoked.
2bed0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64    This opcode ad
2bee0 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f  vances the curso
2bef0 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f  r to the next so
2bf00 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20  rted.** record, 
2bf10 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69  or jumps to P2 i
2bf20 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
2bf30 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72  ore sorted recor
2bf40 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ds..*/.case OP_S
2bf50 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a  orterNext: {  /*
2bf60 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2bf70 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43  ursor *pC;..  pC
2bf80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2bf90 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2bfa0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
2bfb0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2bfc0 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
2bfd0 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78   pC);.  goto nex
2bfe0 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
2bff0 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
2c000 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2c010 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
2c020 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
2c030 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2c040 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2c050 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
2c060 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
2c070 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
2c080 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
2c090 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2c0a0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2c0b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2c0c0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2c0d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c0e0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2c0f0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2c100 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c110 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
2c120 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2c130 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
2c140 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
2c150 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2c160 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
2c170 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
2c180 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
2c190 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78  );..  /* The Nex
2c1a0 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
2c1b0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
2c1c0 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77 69  GT, SeekGE, Rewi
2c1d0 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a 20  nd, and Found.. 
2c1e0 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
2c1f0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
2c200 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
2c210 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
2c220 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
2c230 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
2c240 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  xt.       || pC-
2c250 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2c260 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
2c270 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
2c280 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2c290 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
2c2a0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
2c2b0 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  und .       || p
2c2c0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75  C->seekOp==OP_Nu
2c2d0 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e 73 65 65 6b  llRow|| pC->seek
2c2e0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64  Op==OP_SeekRowid
2c2f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2c300 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2c310 76 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  v.       || pC->
2c320 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2c330 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
2c340 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20  =OP_SeekLE.     
2c350 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2c360 3d 4f 50 5f 4c 61 73 74 20 0a 20 20 20 20 20 20  =OP_Last .      
2c370 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c380 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a 20 20  OP_NullRow);..  
2c390 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
2c3a0 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
2c3b0 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  rsor, pOp->p3);.
2c3c0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
2c3d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2c3e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
2c3f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63  beBranchTaken(rc
2c400 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a  ==SQLITE_OK,2);.
2c410 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2c420 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  _OK ){.    pC->n
2c430 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2c440 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
2c450 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
2c460 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
2c470 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
2c480 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
2c490 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2c4a0 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2c4b0 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
2c4c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2c4d0 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
2c4e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c4f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2c500 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
2c510 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63  = 1;.  goto chec
2c520 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2c530 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2c540 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
2c550 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2c560 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2c570 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2c580 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2c590 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2c5a0 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2c5b0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2c5c0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2c5d0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2c5e0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
2c5f0 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
2c600 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2c610 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
2c620 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
2c630 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  it is the number
2c640 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
2c650 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65  e unpacked.** ke
2c660 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49  y of reg(P2).  I
2c670 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20  n that case, P3 
2c680 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
2c690 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74  the first regist
2c6a0 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e  er.** for the un
2c6b0 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65  packed key.  The
2c6c0 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66   availability of
2c6d0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2c6e0 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a  y can sometimes.
2c6f0 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a  ** be an optimiz
2c700 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
2c710 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2c720 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74  G_APPEND bit set
2c730 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74  , that is a hint
2c740 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
2c750 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69  ayer.** that thi
2c760 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  s insert is like
2c770 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
2c780 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
2c790 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
2c7a0 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
2c7b0 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
2c7c0 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
2c7d0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
2c7e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
2c7f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
2c800 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
2c810 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
2c820 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2c830 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
2c840 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
2c850 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2c860 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
2c870 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
2c880 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
2c890 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
2c8a0 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
2c8b0 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
2c8c0 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
2c8d0 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
2c8e0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2c8f0 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
2c900 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
2c910 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
2c920 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
2c930 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
2c940 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
2c950 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69   used a key equi
2c960 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e  valent.** to P2.
2c970 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73   .**.** This ins
2c980 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
2c990 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e  rks for indices.
2c9a0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
2c9b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2c9c0 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50  for tables is OP
2c9d0 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  _Insert..*/./* O
2c9e0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73  pcode: SorterIns
2c9f0 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ert P1 P2 * * *.
2ca00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2ca10 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2ca20 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2ca30 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2ca40 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2ca50 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2ca60 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2ca70 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2ca80 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2ca90 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20  the sorter P1.  
2caa0 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
2cab0 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61  ry is nil..*/.ca
2cac0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
2cad0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
2cae0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
2caf0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
2cb00 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2cb10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2cb20 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20  reePayload x;.. 
2cb30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2cb40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2cb50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2cb60 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2cb70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p1];.  sqlite3
2cb80 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2cb90 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 61  nter(p, pC);.  a
2cba0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2cbb0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
2cbc0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
2cbd0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2cbe0 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
2cbf0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2cc00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2cc10 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
2cc20 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  lob );.  if( pOp
2cc30 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
2cc40 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
2cc50 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  ge++;.  assert( 
2cc60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2cc70 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20 70  RTYPE_BTREE || p
2cc80 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2cc90 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a 20  orterInsert );. 
2cca0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
2ccb0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20  able==0 );.  rc 
2ccc0 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
2ccd0 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
2cce0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2ccf0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f  _error;.  if( pO
2cd00 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2cd10 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20  rterInsert ){.  
2cd20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2cd30 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70 43  beSorterWrite(pC
2cd40 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65  , pIn2);.  }else
2cd50 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  {.    x.nKey = p
2cd60 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b  In2->n;.    x.pK
2cd70 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
2cd80 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20    x.aMem = aMem 
2cd90 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78  + pOp->p3;.    x
2cda0 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f 70  .nMem = (u16)pOp
2cdb0 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d  ->p4.i;.    rc =
2cdc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
2cdd0 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ert(pC->uc.pCurs
2cde0 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20  or, &x,.        
2cdf0 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
2ce00 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41  LAG_APPEND|OPFLA
2ce10 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29  G_SAVEPOSITION))
2ce20 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70  , .        ((pOp
2ce30 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
2ce40 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
2ce50 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
2ce60 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  0).        );.  
2ce70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2ce80 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2ce90 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
2cea0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2ceb0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
2cec0 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  rc) goto abort_d
2ced0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2cee0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2cef0 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
2cf00 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2cf10 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2cf20 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
2cf30 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
2cf40 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
2cf50 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
2cf60 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
2cf70 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
2cf80 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
2cf90 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
2cfa0 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
2cfb0 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
2cfc0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2cfd0 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
2cfe0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2cff0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
2d000 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
2d010 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
2d020 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2d030 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
2d040 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
2d050 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
2d060 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
2d070 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
2d080 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2d090 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2d0a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2d0b0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2d0c0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2d0d0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2d0e0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2d0f0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2d100 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2d110 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2d120 28 70 2c 20 70 43 29 3b 0a 20 20 70 43 72 73 72  (p, pC);.  pCrsr
2d130 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
2d140 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
2d150 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
2d160 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
2d170 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
2d180 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
2d190 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
2d1a0 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
2d1b0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
2d1c0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
2d1d0 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73  p->p2];.  rc = s
2d1e0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
2d1f0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
2d200 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
2d210 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2d220 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2d230 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
2d240 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
2d250 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
2d260 65 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41  e(pCrsr, BTREE_A
2d270 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69  UXDELETE);.    i
2d280 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d290 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d2a0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
2d2b0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2d2c0 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
2d2d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2d2e0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
2d2f0 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
2d300 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2d310 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64 53 65  code: DeferredSe
2d320 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a  ek P1 * P3 P4 *.
2d330 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76  ** Synopsis: Mov
2d340 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64  e P3 to P1.rowid
2d350 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a   if needed.**.**
2d360 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69   P1 is an open i
2d370 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20  ndex cursor and 
2d380 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P3 is a cursor o
2d390 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
2d3a0 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54  ing.** table.  T
2d3b0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
2d3c0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  a deferred seek 
2d3d0 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20  of the P3 table 
2d3e0 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  cursor.** to the
2d3f0 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73   row that corres
2d400 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72  ponds to the cur
2d410 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a  rent row of P1..
2d420 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  **.** This is a 
2d430 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
2d440 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
2d450 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
2d460 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
2d470 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
2d480 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
2d490 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
2d4a0 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
2d4b0 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
2d4c0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  ns..**.** P4 may
2d4d0 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20   be an array of 
2d4e0 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50  integers (type P
2d4f0 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74  4_INTARRAY) cont
2d500 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e  aining.** one en
2d510 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  try for each col
2d520 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61  umn in the P3 ta
2d530 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65  ble.  If array e
2d540 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20  ntry a(i).** is 
2d550 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2d560 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28  eading column a(
2d570 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72  i)-1 from cursor
2d580 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76   P3 is .** equiv
2d590 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d  alent to perform
2d5a0 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64  ing the deferred
2d5b0 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72   seek and then r
2d5c0 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20  eading column i 
2d5d0 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68  .** from P1.  Th
2d5e0 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
2d5f0 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61  s stored in P3 a
2d600 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72  nd used to redir
2d610 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61  ect.** reads aga
2d620 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20  inst P3 over to 
2d630 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c  P1, thus possibl
2d640 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e  y avoiding the n
2d650 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61  eed to.** seek a
2d660 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50  nd read cursor P
2d670 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  3..*/./* Opcode:
2d680 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20   IdxRowid P1 P2 
2d690 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2d6a0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
2d6b0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
2d6c0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
2d6d0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
2d6e0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
2d6f0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
2d700 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
2d710 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
2d720 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
2d730 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
2d740 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
2d750 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2d760 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
2d770 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
2d780 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
2d790 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
2d7a0 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
2d7b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 66  ..*/.case OP_Def
2d7c0 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73 65 20  erredSeek:.case 
2d7d0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
2d7e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2d7f0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2d800 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20   *pC;           
2d810 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65    /* The P1 inde
2d820 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64  x cursor */.  Vd
2d830 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75  beCursor *pTabCu
2d840 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  r;        /* The
2d850 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72   P2 table cursor
2d860 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65   (OP_DeferredSee
2d870 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34  k only) */.  i64
2d880 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20   rowid;         
2d890 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69           /* Rowi
2d8a0 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e  d that P1 curren
2d8b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a  t points to */..
2d8c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d8d0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2d8e0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2d8f0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2d900 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d910 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2d920 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2d930 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2d940 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2d950 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2d960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2d970 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2d980 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2d990 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2d9a0 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d  ;.  assert( !pC-
2d9b0 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d  >nullRow || pOp-
2d9c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2d9d0 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  owid );..  /* Th
2d9e0 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53  e IdxRowid and S
2d9f0 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20  eek opcodes are 
2da00 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65  combined because
2da10 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c   of the commonal
2da20 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69  ity.  ** of sqli
2da30 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2da40 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74  tore() and sqlit
2da50 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29  e3VdbeIdxRowid()
2da60 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2da70 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2da80 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20  tore(pC);..  /* 
2da90 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72  sqlite3VbeCursor
2daa0 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e  Restore() can on
2dab0 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72  ly fail if the r
2dac0 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64  ecord has been d
2dad0 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20  eleted.  ** out 
2dae0 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63  from under the c
2daf0 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c  ursor.  That wil
2db00 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20  l never happens 
2db10 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a  for an IdxRowid.
2db20 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63    ** or Seek opc
2db30 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56  ode */.  if( NEV
2db40 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
2db50 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2db60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2db70 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
2db80 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
2db90 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2dba0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2dbb0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2dbc0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2dbd0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2dbe0 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  wid(db, pC->uc.p
2dbf0 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b  Cursor, &rowid);
2dc00 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
2dc10 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2dc20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2dc30 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
2dc40 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
2dc50 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64 53  de==OP_DeferredS
2dc60 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  eek ){.      ass
2dc70 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
2dc80 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43  && pOp->p3<p->nC
2dc90 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70  ursor );.      p
2dca0 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73  TabCur = p->apCs
2dcb0 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  r[pOp->p3];.    
2dcc0 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2dcd0 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2dce0 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65  sert( pTabCur->e
2dcf0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2dd00 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
2dd10 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2dd20 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2dd30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2dd40 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65  pTabCur->isTable
2dd50 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2dd60 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
2dd70 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d        pTabCur->m
2dd80 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f  ovetoTarget = ro
2dd90 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43  wid;.      pTabC
2dda0 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  ur->deferredMove
2ddb0 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  to = 1;.      as
2ddc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2ddd0 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c  e==P4_INTARRAY |
2dde0 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20  | pOp->p4.ai==0 
2ddf0 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2de00 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d  ->aAltMap = pOp-
2de10 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54  >p4.ai;.      pT
2de20 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f  abCur->pAltCurso
2de30 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73  r = pC;.    }els
2de40 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  e{.      pOut = 
2de50 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2de60 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f  , pOp);.      pO
2de70 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
2de80 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2de90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2dea0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2deb0 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69  owid );.    sqli
2dec0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2ded0 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  l(&aMem[pOp->p2]
2dee0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2def0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2df00 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
2df10 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2df20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2df30 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2df40 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2df50 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2df60 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2df70 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2df80 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2df90 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2dfa0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2dfb0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2dfc0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2dfd0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2dfe0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2dff0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2e000 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2e010 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2e020 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2e030 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2e040 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
2e050 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2e060 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2e070 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2e080 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2e090 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2e0a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2e0b0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
2e0c0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2e0d0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2e0e0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2e0f0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2e100 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2e110 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2e120 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2e130 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2e140 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2e150 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2e160 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2e170 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
2e180 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2e190 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2e1a0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2e1b0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2e1c0 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
2e1d0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
2e1e0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2e1f0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
2e200 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
2e210 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
2e220 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
2e230 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2e240 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2e250 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2e260 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
2e270 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2e280 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2e290 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2e2a0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2e2b0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2e2c0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2e2d0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2e2e0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2e2f0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2e300 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2e310 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2e320 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2e330 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2e340 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2e350 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2e360 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2e370 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2e380 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2e390 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2e3a0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2e3b0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
2e3c0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
2e3d0 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
2e3e0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2e3f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2e400 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2e410 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
2e420 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2e430 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2e440 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2e450 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2e460 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2e470 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2e480 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2e490 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2e4a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2e4b0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2e4c0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2e4d0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2e4e0 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2e4f0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2e500 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2e510 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2e520 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2e530 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2e540 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2e550 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2e560 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
2e570 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2e580 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
2e590 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
2e5a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2e5b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2e5c0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2e5d0 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
2e5e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2e5f0 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
2e600 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2e610 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
2e620 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2e630 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
2e640 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
2e650 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2e660 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
2e670 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2e680 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2e690 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2e6a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2e6b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2e6c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2e6d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2e6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2e6f0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
2e700 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2e710 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2e720 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2e730 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2e740 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
2e750 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2e760 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2e770 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
2e780 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
2e790 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2e7a0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2e7b0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2e7c0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2e7d0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2e7e0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
2e7f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
2e800 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
2e810 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2e820 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2e830 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2e840 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
2e850 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
2e860 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2e870 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2e880 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
2e890 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2e8a0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2e8b0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
2e8c0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2e8d0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
2e8e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
2e8f0 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
2e900 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
2e910 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  eld; i++){.     
2e920 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2e930 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
2e940 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
2e950 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b  R_TRACE(pOp->p3+
2e960 69 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  i, &aMem[pOp->p3
2e970 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  +i]);.    }.  }.
2e980 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30  #endif.  res = 0
2e990 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2e9a0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
2e9b0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2e9c0 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
2e9d0 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
2e9e0 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72  mpare(db, pC, &r
2e9f0 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
2ea00 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d  t( (OP_IdxLE&1)=
2ea10 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26  =(OP_IdxLT&1) &&
2ea20 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28   (OP_IdxGE&1)==(
2ea30 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20  OP_IdxGT&1) );. 
2ea40 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64   if( (pOp->opcod
2ea50 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  e&1)==(OP_IdxLT&
2ea60 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  1) ){.    assert
2ea70 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2ea80 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
2ea90 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2eaa0 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72   );.    res = -r
2eab0 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  es;.  }else{.   
2eac0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2ead0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2eae0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2eaf0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2eb00 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65  es++;.  }.  Vdbe
2eb10 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e  BranchTaken(res>
2eb20 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  0,2);.  if( rc )
2eb30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2eb40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2eb50 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d  res>0 ) goto jum
2eb60 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2eb70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2eb80 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
2eb90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2eba0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
2ebb0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2ebc0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
2ebd0 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
2ebe0 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
2ebf0 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
2ec00 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2ec10 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
2ec20 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2ec30 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
2ec40 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
2ec50 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
2ec60 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
2ec70 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2ec80 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
2ec90 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2eca0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
2ecb0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
2ecc0 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
2ecd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
2ece0 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
2ecf0 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
2ed00 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
2ed10 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
2ed20 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
2ed30 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
2ed40 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
2ed50 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2ed60 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
2ed70 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
2ed80 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
2ed90 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
2eda0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
2edb0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
2edc0 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
2edd0 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
2ede0 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
2edf0 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
2ee00 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2ee10 50 32 2e 20 49 66 20 6e 6f 20 70 61 67 65 20 6d  P2. If no page m
2ee20 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
2ee30 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
2ee40 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e 67  e.** table being
2ee50 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
2ee60 65 61 64 79 20 74 68 65 20 6c 61 73 74 20 6f 6e  eady the last on
2ee70 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2ee80 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65  e) then a .** ze
2ee90 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
2eea0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
2eeb0 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64   AUTOVACUUM is d
2eec0 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a  isabled then a z
2eed0 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ero .** is store
2eee0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
2eef0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2ef00 6f 64 65 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ode throws an er
2ef10 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65  ror if there are
2ef20 20 61 6e 79 20 61 63 74 69 76 65 20 72 65 61 64   any active read
2ef30 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69  er VMs when.** i
2ef40 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68  t is invoked. Th
2ef50 69 73 20 69 73 20 64 6f 6e 65 20 74 6f 20 61 76  is is done to av
2ef60 6f 69 64 20 74 68 65 20 64 69 66 66 69 63 75 6c  oid the difficul
2ef70 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ty associated wi
2ef80 74 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20  th .** updating 
2ef90 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73  existing cursors
2efa0 20 77 68 65 6e 20 61 20 72 6f 6f 74 20 70 61 67   when a root pag
2efb0 65 20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e  e is moved in an
2efc0 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20   AUTOVACUUM .** 
2efd0 64 61 74 61 62 61 73 65 2e 20 54 68 69 73 20 65  database. This e
2efe0 72 72 6f 72 20 69 73 20 74 68 72 6f 77 6e 20 65  rror is thrown e
2eff0 76 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ven if the datab
2f000 61 73 65 20 69 73 20 6e 6f 74 20 61 6e 20 41 55  ase is not an AU
2f010 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20  TOVACUUM .** db 
2f020 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 76 6f 69  in order to avoi
2f030 64 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e  d introducing an
2f040 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79   incompatibility
2f050 20 62 65 74 77 65 65 6e 20 61 75 74 6f 76 61 63   between autovac
2f060 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d  uum .** and non-
2f070 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73  autovacuum modes
2f080 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2f090 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
2f0a0 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
2f0b0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2f0c0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
2f0d0 20 69 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33   iDb;..  sqlite3
2f0e0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2f0f0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73  nter(p, 0);.  as
2f100 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2f110 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
2f120 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20  ( pOp->p1>1 );. 
2f130 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2f140 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2f150 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2f160 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
2f170 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20  db->nVdbeRead > 
2f180 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20  db->nVDestroy+1 
2f190 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2f1a0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
2f1b0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
2f1c0 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f  OE_Abort;.    go
2f1d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2f1e0 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a  error;.  }else{.
2f1f0 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
2f200 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  3;.    assert( D
2f210 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
2f220 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
2f230 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20      iMoved = 0; 
2f240 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
2f250 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65   Only to silence
2f260 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2f270 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2f280 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
2f290 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
2f2a0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
2f2b0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
2f2c0 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
2f2d0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
2f2e0 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63  oved;.    if( rc
2f2f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2f300 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e  e_to_error;.#ifn
2f310 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f320 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
2f330 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  f( iMoved!=0 ){.
2f340 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
2f350 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
2f360 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
2f370 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
2f380 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
2f390 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
2f3a0 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
2f3b0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2f3c0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
2f3d0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
2f3e0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
2f3f0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
2f400 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2f410 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
2f420 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
2f430 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2f440 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
2f450 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
2f460 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
2f470 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2f480 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
2f490 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
2f4a0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f4b0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
2f4c0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
2f4d0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
2f4e0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
2f4f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
2f500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f510 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
2f520 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
2f530 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2f540 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2f550 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
2f560 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2f570 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2f580 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2f590 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2f5a0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2f5b0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2f5c0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2f5d0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2f5e0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
2f5f0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
2f600 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2f610 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
2f620 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
2f630 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
2f640 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
2f650 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
2f660 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
2f670 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
2f680 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
2f690 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
2f6a0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2f6b0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2f6c0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
2f6d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
2f6e0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
2f6f0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
2f700 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
2f710 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
2f720 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
2f730 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
2f740 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
2f750 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2f760 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
2f770 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
2f780 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
2f790 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2f7a0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2f7b0 30 29 3b 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  0);.  nChange = 
2f7c0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2f7d0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2f7e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2f7f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2f800 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2f810 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2f820 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2f830 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2f840 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2f850 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2f860 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2f870 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2f880 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2f890 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2f8a0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2f8b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2f8c0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2f8d0 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2f8e0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2f8f0 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2f900 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2f910 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2f920 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2f930 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2f940 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2f950 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2f960 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f970 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2f980 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2f990 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2f9a0 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2f9b0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2f9c0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2f9d0 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2f9e0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2f9f0 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2fa00 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2fa10 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2fa20 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2fa30 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2fa40 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2fa50 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2fa60 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2fa70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2fa80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fa90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2faa0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2fab0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2fac0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2fad0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2fae0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2faf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2fb00 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2fb10 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2fb20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2fb30 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2fb40 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2fb50 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2fb60 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2fb70 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2fb80 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2fb90 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2fba0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2fbb0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2fbc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2fbd0 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2fbe0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2fbf0 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50 32  reateBtree P1 P2
2fc00 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2fc10 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2fc20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a  iDb=P1 flags=P3.
2fc30 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2fc40 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74   new b-tree in t
2fc50 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2fc60 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2fc70 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50  r in the.** TEMP
2fc80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2fc90 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
2fca0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2fcb0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
2fcc0 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20  The P3 argument 
2fcd0 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45 45  must be 1 (BTREE
2fce0 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72  _INTKEY) for a r
2fcf0 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74  owid table.** it
2fd00 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52 45   must be 2 (BTRE
2fd10 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61  E_BLOBKEY) for a
2fd20 6e 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f  n index or WITHO
2fd30 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a  UT ROWID table..
2fd40 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2fd50 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2fd60 65 77 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f  ew b-tree is sto
2fd70 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2fd80 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  P2..*/.case OP_C
2fd90 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20  reateBtree: {   
2fda0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2fdb0 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
2fdc0 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69  Db *pDb;..  sqli
2fdd0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2fde0 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
2fdf0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2fe00 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2fe10 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73    pgno = 0;.  as
2fe20 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 42  sert( pOp->p3==B
2fe30 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c 20 70  TREE_INTKEY || p
2fe40 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 42 4c  Op->p3==BTREE_BL
2fe50 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73 73 65 72  OBKEY );.  asser
2fe60 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2fe70 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2fe80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2fe90 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2fea0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
2feb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2fec0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2fed0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
2fee0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2fef0 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
2ff00 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2ff10 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
2ff20 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pDb->pBt, &pgn
2ff30 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69  o, pOp->p3);.  i
2ff40 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2ff50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ff60 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
2ff70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
2ff80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45  ./* Opcode: SqlE
2ff90 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  xec * * * P4 *.*
2ffa0 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51 4c  *.** Run the SQL
2ffb0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 74   statement or st
2ffc0 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
2ffd0 65 64 20 69 6e 20 74 68 65 20 50 34 20 73 74 72  ed in the P4 str
2ffe0 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
2fff0 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 73 71 6c  SqlExec: {.  sql
30000 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
30010 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
30020 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b    db->nSqlExec++
30030 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30040 5f 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70  _exec(db, pOp->p
30050 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  4.z, 0, 0, 0);. 
30060 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b   db->nSqlExec--;
30070 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
30080 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
30090 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
300a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
300b0 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
300c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
300d0 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
300e0 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
300f0 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
30100 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
30110 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
30120 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
30130 50 34 2e 20 20 49 66 20 50 34 20 69 73 20 61 20  P4.  If P4 is a 
30140 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68  NULL pointer, th
30150 65 6e 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  en the.** entire
30160 20 73 63 68 65 6d 61 20 66 6f 72 20 50 31 20 69   schema for P1 i
30170 73 20 72 65 70 61 72 73 65 64 2e 0a 2a 2a 0a 2a  s reparsed..**.*
30180 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
30190 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
301a0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
301b0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
301c0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
301d0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
301e0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
301f0 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
30200 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
30210 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
30220 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
30230 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
30240 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
30250 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
30260 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
30270 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
30280 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
30290 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
302a0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
302b0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
302c0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
302d0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
302e0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
302f0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
30300 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
30310 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
30320 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
30330 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
30340 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
30350 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
30360 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
30370 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
30380 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
30390 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
303a0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
303b0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
303c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
303d0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
303e0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
303f0 61 64 65 64 29 20 29 3b 0a 0a 23 69 66 6e 64 65  aded) );..#ifnde
30400 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
30410 54 45 52 54 41 42 4c 45 0a 20 20 69 66 28 20 70  TERTABLE.  if( p
30420 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b 0a 20  Op->p4.z==0 ){. 
30430 20 20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61     sqlite3Schema
30440 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b 69 44  Clear(db->aDb[iD
30450 62 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 20  b].pSchema);.   
30460 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26 3d   db->mDbFlags &=
30470 20 7e 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b   ~DBFLAG_SchemaK
30480 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72 63 20 3d  nownOk;.    rc =
30490 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28   sqlite3InitOne(
304a0 64 62 2c 20 69 44 62 2c 20 26 70 2d 3e 7a 45 72  db, iDb, &p->zEr
304b0 72 4d 73 67 2c 20 49 4e 49 54 46 4c 41 47 5f 41  rMsg, INITFLAG_A
304c0 6c 74 65 72 54 61 62 6c 65 29 3b 0a 20 20 20 20  lterTable);.    
304d0 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20  db->mDbFlags |= 
304e0 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
304f0 6e 67 65 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  nge;.    p->expi
30500 72 65 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  red = 0;.  }else
30510 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20  .#endif.  {.    
30520 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52  zMaster = MASTER
30530 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44  _NAME;.    initD
30540 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
30550 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
30560 69 44 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  iDb;.    initDat
30570 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
30580 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 69 6e  >zErrMsg;.    in
30590 69 74 44 61 74 61 2e 6d 49 6e 69 74 46 6c 61 67  itData.mInitFlag
305a0 73 20 3d 20 30 3b 0a 20 20 20 20 7a 53 71 6c 20  s = 0;.    zSql 
305b0 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
305c0 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
305d0 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
305e0 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
305f0 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  '.%s WHERE %s OR
30600 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
30610 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
30620 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61  b].zDbSName, zMa
30630 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
30640 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
30650 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
30660 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
30670 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  T;.    }else{.  
30680 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
30690 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
306a0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
306b0 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
306c0 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
306d0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
306e0 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
306f0 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
30700 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
30710 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
30720 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
30730 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
30740 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
30750 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
30760 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
30770 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
30780 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  NN(db, zSql);.  
30790 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
307a0 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
307b0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
307c0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
307d0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
307e0 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28  ion(db);.    if(
307f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
30800 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  M ){.      goto 
30810 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
30820 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
30830 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
30840 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
30850 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30860 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
30870 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
30880 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
30890 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
308a0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
308b0 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
308c0 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
308d0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
308e0 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
308f0 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
30900 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
30910 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
30920 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
30930 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
30940 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
30950 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
30960 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
30970 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
30980 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
30990 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
309a0 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
309b0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
309c0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
309d0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
309e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
309f0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  or;.  break;  .}
30a00 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
30a10 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
30a20 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
30a30 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
30a40 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
30a50 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
30a60 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
30a70 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
30a80 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
30a90 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
30aa0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
30ab0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
30ac0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
30ad0 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
30ae0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
30af0 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
30b00 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
30b10 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
30b20 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
30b30 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
30b40 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
30b50 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
30b60 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
30b70 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
30b80 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
30b90 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
30ba0 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  r(p, 0);.  sqlit
30bb0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
30bc0 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
30bd0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
30be0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
30bf0 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
30c00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
30c10 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
30c20 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
30c30 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
30c40 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
30c50 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
30c60 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
30c70 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
30c80 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
30c90 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
30ca0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
30cb0 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
30cc0 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f   opcode).** in o
30cd0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
30ce0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
30cf0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
30d00 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
30d10 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
30d20 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
30d30 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a  se OP_DropIndex:
30d40 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
30d50 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
30d60 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  (p, 0);.  sqlite
30d70 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
30d80 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
30d90 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
30da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
30db0 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
30dc0 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
30dd0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
30de0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
30df0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
30e00 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
30e10 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
30e20 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
30e30 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
30e40 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
30e50 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
30e60 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
30e70 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
30e80 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
30e90 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
30ea0 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
30eb0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
30ec0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
30ed0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
30ee0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
30ef0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
30f00 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
30f10 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
30f20 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
30f30 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
30f40 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
30f50 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
30f60 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
30f70 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
30f80 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
30f90 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
30fa0 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
30fb0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
30fc0 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
30fd0 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
30fe0 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
30ff0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
31000 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
31010 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
31020 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
31030 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
31040 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
31050 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
31060 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
31070 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
31080 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
31090 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  P3 contains one 
310a0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 61  less than the ma
310b0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
310c0 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
310d0 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
310e0 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
310f0 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
31100 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
31110 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
31120 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
31130 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
31140 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
31150 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
31160 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
31170 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
31180 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
31190 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
311a0 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
311b0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
311c0 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f   integers.** sto
311d0 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52  red in P4_INTARR
311e0 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  AY argument..**.
311f0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
31200 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
31210 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
31220 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
31230 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
31240 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
31250 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
31260 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
31270 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
31280 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
31290 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
312a0 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
312b0 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
312c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
312d0 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
312e0 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
312f0 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
31300 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
31310 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
31320 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
31330 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
31340 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
31350 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
31360 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
31370 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
31380 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
31390 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
313a0 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
313b0 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
313c0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
313d0 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
313e0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
313f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
31400 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
31410 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
31420 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34   aRoot = pOp->p4
31430 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  .ai;.  assert( n
31440 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65  Root>0 );.  asse
31450 72 74 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52  rt( aRoot[0]==nR
31460 6f 6f 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  oot );.  assert(
31470 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
31480 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
31490 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
314a0 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
314b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
314c0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
314d0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
314e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
314f0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
31500 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
31510 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
31520 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31530 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
31540 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
31550 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
31560 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
31570 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
31580 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
31590 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
315a0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
315b0 2e 70 42 74 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c  .pBt, &aRoot[1],
315c0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
315d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315e0 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
315f0 45 72 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e 45 72  Err->u.i+1, &nEr
31600 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  r);.  sqlite3Vdb
31610 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
31620 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
31630 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
31640 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
31650 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
31660 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
31670 65 6c 73 65 7b 0a 20 20 20 20 70 6e 45 72 72 2d  else{.    pnErr-
31680 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a  >u.i -= nErr-1;.
31690 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
316a0 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
316b0 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
316c0 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
316d0 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
316e0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
316f0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
31700 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
31710 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
31720 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
31730 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
31740 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
31750 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
31760 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
31770 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
31780 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b  s: rowset(P1)=r[
31790 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  P2].**.** Insert
317a0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
317b0 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
317c0 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 52 6f  ter P2 into a Ro
317d0 77 53 65 74 20 6f 62 6a 65 63 74 0a 2a 2a 20 68  wSet object.** h
317e0 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
317f0 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
31800 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
31810 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
31820 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
31830 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
31840 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
31850 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
31860 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
31870 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
31880 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
31890 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
318a0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
318b0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
318c0 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
318d0 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
318e0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
318f0 74 28 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e  t(pIn1) ) goto n
31900 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
31910 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
31920 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31  MemIsRowSet(pIn1
31930 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 52 6f  ) );.  sqlite3Ro
31940 77 53 65 74 49 6e 73 65 72 74 28 28 52 6f 77 53  wSetInsert((RowS
31950 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  et*)pIn1->z, pIn
31960 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
31970 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31980 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
31990 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
319a0 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
319b0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
319c0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
319d0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
319e0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 6e  RowSet object in
319f0 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20 74   P1.** and put t
31a00 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
31a10 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 4f  egister P3..** O
31a20 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62 6a  r, if RowSet obj
31a30 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69 61  ect P1 is initia
31a40 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
31a50 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
31a60 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
31a70 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
31a80 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
31a90 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
31aa0 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a  ump, in1, out3 *
31ab0 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20  /.  i64 val;..  
31ac0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
31ad0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31ae0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
31af0 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 7c 7c 20  MEM_Blob)==0 || 
31b00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73  sqlite3VdbeMemIs
31b10 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a  RowSet(pIn1) );.
31b20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
31b30 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
31b40 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
31b50 52 6f 77 53 65 74 4e 65 78 74 28 28 52 6f 77 53  RowSetNext((RowS
31b60 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 26 76 61  et*)pIn1->z, &va
31b70 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
31b80 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
31b90 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
31ba0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
31bb0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
31bc0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
31bd0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
31be0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
31bf0 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
31c00 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
31c10 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
31c20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
31c30 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
31c40 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31c50 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
31c60 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
31c70 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
31c80 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
31c90 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
31ca0 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
31cb0 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
31cc0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
31cd0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
31ce0 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
31cf0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31d00 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
31d10 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
31d20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
31d30 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
31d40 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
31d50 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
31d60 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
31d70 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
31d80 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
31d90 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
31da0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
31db0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
31dc0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
31dd0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
31de0 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
31df0 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
31e00 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
31e10 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
31e20 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
31e30 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
31e40 68 65 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74  here sets of int
31e50 65 67 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73  egers.** are ins
31e60 65 72 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63  erted in distinc
31e70 74 20 70 68 61 73 65 73 2c 20 77 68 69 63 68 20  t phases, which 
31e80 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
31e90 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
31ea0 0a 2a 2a 20 45 61 63 68 20 73 65 74 20 69 73 20  .** Each set is 
31eb0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
31ec0 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
31ed0 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
31ee0 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
31ef0 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
31f00 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d   must have P4==-
31f10 31 2c 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f  1, and for all o
31f20 74 68 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73  ther sets.** mus
31f30 74 20 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a  t have P4>0..**.
31f40 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
31f50 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
31f60 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
31f70 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
31f80 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77   test.** the Row
31f90 53 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  Set object for P
31fa0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
31fb0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
31fc0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
31fd0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
31fe0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
31ff0 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
32000 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
32010 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
32020 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
32030 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
32040 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
32050 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
32060 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
32070 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
32080 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
32090 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
320a0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
320b0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
320c0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
320d0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
320e0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
320f0 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
32100 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
32110 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
32140 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
32150 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
32160 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
32170 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
32180 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
32190 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
321a0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
321b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
321c0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
321d0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
321e0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
321f0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
32200 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
32210 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
32220 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
32230 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
32240 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
32250 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
32260 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
32270 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  0 ){.    if( sql
32280 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
32290 77 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f 74  wSet(pIn1) ) got
322a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
322b0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
322c0 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70  dbeMemIsRowSet(p
322d0 49 6e 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  In1) );.  assert
322e0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
322f0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
32300 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c  ert( iSet==-1 ||
32310 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66   iSet>=0 );.  if
32320 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78  ( iSet ){.    ex
32330 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f  ists = sqlite3Ro
32340 77 53 65 74 54 65 73 74 28 28 52 6f 77 53 65 74  wSetTest((RowSet
32350 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69 53 65 74 2c  *)pIn1->z, iSet,
32360 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
32370 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
32380 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  (exists!=0,2);. 
32390 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20     if( exists ) 
323a0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
323b0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
323c0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
323d0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28 52  3RowSetInsert((R
323e0 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20  owSet*)pIn1->z, 
323f0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
32400 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
32410 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32420 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
32430 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
32440 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
32450 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
32460 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
32470 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
32480 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
32490 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
324a0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
324b0 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
324c0 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
324d0 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
324e0 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
324f0 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
32500 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
32510 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
32520 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
32530 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
32540 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
32550 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
32560 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
32570 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
32580 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
32590 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
325a0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
325b0 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
325c0 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
325d0 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
325e0 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
325f0 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
32600 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
32610 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
32620 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
32630 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
32640 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
32650 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
32660 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
32670 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
32680 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
32690 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
326a0 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
326b0 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
326c0 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
326d0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
326e0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
326f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
32700 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
32710 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
32720 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
32730 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
32740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
32750 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
32760 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
32770 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
32780 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
32790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
327a0 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
327b0 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
327c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
327d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
327e0 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
327f0 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
32800 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
32810 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
32820 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
32830 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
32840 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
32850 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
32860 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
32870 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
32880 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
32890 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
328a0 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
328b0 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
328c0 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
328d0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
328e0 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
328f0 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
32900 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
32910 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
32920 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
32930 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
32940 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
32950 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
32960 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
32970 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
32980 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
32990 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
329a0 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
329b0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
329c0 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
329d0 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
329e0 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
329f0 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
32a00 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
32a10 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
32a20 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
32a30 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
32a40 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
32a50 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
32a60 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
32a70 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
32a80 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
32a90 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
32aa0 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
32ab0 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
32ac0 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
32ad0 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
32ae0 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
32af0 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
32b00 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
32b10 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
32b20 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
32b30 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
32b40 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
32b50 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
32b60 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
32b70 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
32b80 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
32b90 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
32ba0 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
32bb0 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
32bc0 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
32bd0 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
32be0 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
32bf0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
32c00 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
32c10 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
32c20 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
32c30 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
32c40 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
32c50 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
32c60 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
32c70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
32c80 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
32c90 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
32ca0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
32cb0 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
32cc0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
32cd0 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
32ce0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74  3VdbeError(p, "t
32cf0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
32d00 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
32d10 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ion");.    goto 
32d20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
32d30 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  or;.  }..  /* Re
32d40 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
32d50 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
32d60 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
32d70 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
32d80 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
32d90 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
32da0 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
32db0 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
32dc0 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
32dd0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
32de0 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
32df0 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
32e00 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
32e10 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
32e20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
32e30 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
32e40 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
32e50 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
32e60 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
32e70 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
32e80 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
32e90 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
32ea0 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
32eb0 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
32ec0 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
32ed0 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
32ee0 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
32ef0 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
32f00 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
32f10 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
32f20 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
32f30 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
32f40 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
32f50 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
32f60 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
32f70 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
32f80 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
32f90 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
32fa0 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
32fb0 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
32fc0 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73  am->nCsr;.    as
32fd0 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a  sert( nMem>0 );.
32fe0 20 20 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d      if( pProgram
32ff0 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d  ->nCsr==0 ) nMem
33000 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  ++;.    nByte = 
33010 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
33020 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
33030 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
33040 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
33050 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
33060 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
33070 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2a  zeof(VdbeCursor*
33080 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
33090 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  + (pProgram->nOp
330a0 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20 70 46 72   + 7)/8;.    pFr
330b0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  ame = sqlite3DbM
330c0 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42  allocZero(db, nB
330d0 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70  yte);.    if( !p
330e0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67  Frame ){.      g
330f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
33100 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
33110 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29  eMemRelease(pRt)
33120 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73  ;.    pRt->flags
33130 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
33140 44 79 6e 3b 0a 20 20 20 20 70 52 74 2d 3e 7a 20  Dyn;.    pRt->z 
33150 3d 20 28 63 68 61 72 2a 29 70 46 72 61 6d 65 3b  = (char*)pFrame;
33160 0a 20 20 20 20 70 52 74 2d 3e 6e 20 3d 20 6e 42  .    pRt->n = nB
33170 79 74 65 3b 0a 20 20 20 20 70 52 74 2d 3e 78 44  yte;.    pRt->xD
33180 65 6c 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  el = sqlite3Vdbe
33190 46 72 61 6d 65 4d 65 6d 44 65 6c 3b 0a 0a 20 20  FrameMemDel;..  
331a0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
331b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
331c0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
331d0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
331e0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
331f0 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
33200 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  e->pc = (int)(pO
33210 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46  p - aOp);.    pF
33220 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e  rame->aMem = p->
33230 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  aMem;.    pFrame
33240 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d  ->nMem = p->nMem
33250 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70  ;.    pFrame->ap
33260 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a  Csr = p->apCsr;.
33270 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72      pFrame->nCur
33280 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72  sor = p->nCursor
33290 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
332a0 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
332b0 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d  pFrame->nOp = p-
332c0 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >nOp;.    pFrame
332d0 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72  ->token = pProgr
332e0 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65  am->token;.#ifde
332f0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
33300 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
33310 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78      pFrame->anEx
33320 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a  ec = p->anExec;.
33330 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
33340 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
33350 46 72 61 6d 65 2d 3e 69 46 72 61 6d 65 4d 61 67  Frame->iFrameMag
33360 69 63 20 3d 20 53 51 4c 49 54 45 5f 46 52 41 4d  ic = SQLITE_FRAM
33370 45 5f 4d 41 47 49 43 3b 0a 23 65 6e 64 69 66 0a  E_MAGIC;.#endif.
33380 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62  .    pEnd = &Vdb
33390 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
333a0 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  )[pFrame->nChild
333b0 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d  Mem];.    for(pM
333c0 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  em=VdbeFrameMem(
333d0 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70  pFrame); pMem!=p
333e0 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  End; pMem++){.  
333f0 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
33400 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
33410 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
33420 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
33430 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
33440 3d 20 28 56 64 62 65 46 72 61 6d 65 2a 29 70 52  = (VdbeFrame*)pR
33450 74 2d 3e 7a 3b 0a 20 20 20 20 61 73 73 65 72 74  t->z;.    assert
33460 28 20 70 52 74 2d 3e 78 44 65 6c 3d 3d 73 71 6c  ( pRt->xDel==sql
33470 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d 65 6d  ite3VdbeFrameMem
33480 44 65 6c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Del );.    asser
33490 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
334a0 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
334b0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
334c0 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20  Mem .        || 
334d0 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  (pProgram->nCsr=
334e0 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e  =0 && pProgram->
334f0 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e  nMem+1==pFrame->
33500 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20  nChildMem) );.  
33510 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
33520 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
33530 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
33540 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29     assert( (int)
33550 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72  (pOp - aOp)==pFr
33560 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
33570 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
33580 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
33590 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
335a0 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
335b0 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
335c0 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
335d0 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
335e0 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62  e;.  pFrame->nDb
335f0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e  Change = p->db->
33600 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72  nChange;.  asser
33610 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  t( pFrame->pAuxD
33620 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61  ata==0 );.  pFra
33630 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70  me->pAuxData = p
33640 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70 2d  ->pAuxData;.  p-
33650 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a 20  >pAuxData = 0;. 
33660 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
33670 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
33680 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
33690 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46 72   = aMem = VdbeFr
336a0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a  ameMem(pFrame);.
336b0 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
336c0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
336d0 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
336e0 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
336f0 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
33700 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
33710 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  *)&aMem[p->nMem]
33720 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63  ;.  pFrame->aOnc
33730 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61 70 43  e = (u8*)&p->apC
33740 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  sr[pProgram->nCs
33750 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46 72  r];.  memset(pFr
33760 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20 28  ame->aOnce, 0, (
33770 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20  pProgram->nOp + 
33780 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f 70 20  7)/8);.  p->aOp 
33790 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
337a0 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
337b0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
337c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
337d0 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
337e0 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65  TATUS.  p->anExe
337f0 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  c = 0;.#endif.  
33800 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a  pOp = &aOp[-1];.
33810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
33820 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
33830 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
33840 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
33850 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
33860 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
33870 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
33880 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
33890 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
338a0 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
338b0 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
338c0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
338d0 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
338e0 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
338f0 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
33900 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
33910 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
33920 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
33930 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
33940 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
33950 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
33960 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
33970 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
33980 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
33990 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
339a0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
339b0 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
339c0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
339d0 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
339e0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
339f0 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
33a00 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
33a10 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
33a20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
33a30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
33a40 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46   out2 */.  VdbeF
33a50 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
33a60 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74  Mem *pIn;.  pOut
33a70 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
33a80 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72  e(p, pOp);.  pFr
33a90 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
33aa0 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
33ab0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
33ac0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
33ad0 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
33ae0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
33af0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
33b00 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
33b10 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
33b20 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
33b30 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
33b40 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
33b50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
33b60 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
33b70 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
33b80 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
33b90 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31  nopsis: fkctr[P1
33ba0 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  ]+=P2.**.** Incr
33bb0 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
33bc0 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
33bd0 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
33be0 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
33bf0 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
33c00 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
33c10 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
33c20 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
33c30 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
33c40 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
33c50 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
33c60 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
33c70 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
33c80 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
33c90 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
33ca0 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
33cb0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
33cc0 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
33cd0 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
33ce0 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  {.  if( db->flag
33cf0 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72  s & SQLITE_Defer
33d00 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  FKs ){.    db->n
33d10 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
33d20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
33d30 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  lse if( pOp->p1 
33d40 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
33d50 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
33d60 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
33d70 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
33d80 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
33d90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
33da0 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
33db0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
33dc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66  * Synopsis: if f
33dd0 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  kctr[P1]==0 goto
33de0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P2.**.** This o
33df0 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
33e00 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
33e10 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
33e20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
33e30 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
33e40 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
33e50 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
33e60 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
33e70 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
33e80 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
33e90 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
33ea0 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
33eb0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
33ec0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
33ed0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
33ee0 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
33ef0 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
33f00 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
33f10 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
33f20 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
33f30 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
33f40 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
33f50 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
33f60 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
33f70 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
33f80 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
33f90 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
33fa0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
33fb0 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
33fc0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
33fd0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56  pOp->p1 ){.    V
33fe0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64  dbeBranchTaken(d
33ff0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
34000 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
34010 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
34020 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  2);.    if( db->
34030 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
34040 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
34050 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
34060 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34070 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
34080 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e  BranchTaken(p->n
34090 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
340a0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
340b0 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
340c0 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
340d0 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
340e0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
340f0 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
34100 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
34110 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
34120 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
34130 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
34140 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
34150 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
34160 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
34170 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
34180 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
34190 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
341a0 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
341b0 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
341c0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
341d0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
341e0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
341f0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
34200 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
34210 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
34220 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
34230 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
34240 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
34250 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
34260 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
34270 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
34280 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
34290 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
342a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
342b0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
342c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
342d0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
342e0 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
342f0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
34300 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
34310 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
34320 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
34330 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
34340 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
34350 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
34360 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
34370 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
34380 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
34390 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
343a0 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
343b0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
343c0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
343d0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
343e0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
343f0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
34400 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
34410 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
34420 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
34430 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
34440 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
34450 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
34460 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
34470 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
34480 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
34490 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
344a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
344b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
344c0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
344d0 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
344e0 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
344f0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
34500 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
34510 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67  hen r[P1]-=P3, g
34520 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
34530 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
34540 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
34550 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
34560 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
34570 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
34580 2c 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72  , subtract P3 fr
34590 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  om the.** value 
345a0 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74  in P1 and jump t
345b0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
345c0 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  he initial value
345d0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
345e0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20  is less than 1, 
345f0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
34600 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61  e is unchanged a
34610 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65  nd control passe
34620 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
34630 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
34640 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n..*/.case OP_If
34650 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
34660 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
34670 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
34680 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
34690 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
346a0 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
346b0 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d  anchTaken( pIn1-
346c0 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i>0, 2);.  if
346d0 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
346e0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d  .    pIn1->u.i -
346f0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67  = pOp->p3;.    g
34700 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
34710 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
34720 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65  /* Opcode: Offse
34730 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20  tLimit P1 P2 P3 
34740 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
34750 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
34760 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78   r[P2]=r[P1]+max
34770 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72  (0,r[P3]) else r
34780 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20  [P2]=(-1).**.** 
34790 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66  This opcode perf
347a0 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20  orms a commonly 
347b0 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e  used computation
347c0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
347d0 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  .** LIMIT and OF
347e0 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72  FSET process.  r
347f0 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c  [P1] holds the l
34800 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72  imit counter.  r
34810 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68  [P3].** holds th
34820 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  e offset counter
34830 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f  .  The opcode co
34840 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69  mputes the combi
34850 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20  ned value.** of 
34860 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
34870 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20  FSET and stores 
34880 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b  that value in r[
34890 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a  P2].  The r[P2].
348a0 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65  ** value compute
348b0 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  d is the total n
348c0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
348d0 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  at will need to 
348e0 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e  be.** visited in
348f0 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65   order to comple
34900 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a  te the query..**
34910 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20  .** If r[P3] is 
34920 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
34930 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
34940 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a  re is no OFFSET.
34950 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
34960 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61  set to be the va
34970 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  lue of the LIMIT
34980 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69  , r[P1]..**.** i
34990 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20  f r[P1] is zero 
349a0 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61  or negative, tha
349b0 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73  t means there is
349c0 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64   no LIMIT.** and
349d0 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
349e0 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65   -1. .**.** Othe
349f0 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20  rwise, r[P2] is 
34a00 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f  set to the sum o
34a10 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33  f r[P1] and r[P3
34a20 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  ]..*/.case OP_Of
34a30 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20  fsetLimit: {    
34a40 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e  /* in1, out2, in
34a50 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20  3 */.  i64 x;.  
34a60 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
34a70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
34a80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
34a90 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
34aa0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
34ab0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
34ac0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
34ad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
34ae0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
34af0 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e  Int );.  x = pIn
34b00 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c  1->u.i;.  if( x<
34b10 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64  =0 || sqlite3Add
34b20 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e  Int64(&x, pIn3->
34b30 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a  u.i>0?pIn3->u.i:
34b40 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  0) ){.    /* If 
34b50 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73  the LIMIT is les
34b60 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
34b70 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f  to zero, loop fo
34b80 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20  rever.  This.   
34b90 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65   ** is documente
34ba0 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66  d.  But also, if
34bb0 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45   the LIMIT+OFFSE
34bc0 54 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74  T exceeds 2^63 t
34bd0 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20  hen.    ** also 
34be0 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
34bf0 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e  his is undocumen
34c00 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f  ted.  In fact, o
34c10 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20  ne could argue. 
34c20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c     ** that the l
34c30 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69  oop should termi
34c40 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d  nate.  But assum
34c50 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74  ing 1 billion it
34c60 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20  erations.    ** 
34c70 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20  per second (far 
34c80 65 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61  exceeding the ca
34c90 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e  pabilities of an
34ca0 79 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61  y current hardwa
34cb0 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f  re).    ** it wo
34cc0 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20  uld take nearly 
34cd0 33 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74  300 years to act
34ce0 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20  ually reach the 
34cf0 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a  limit.  So.    *
34d00 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65  * looping foreve
34d10 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c  r is a reasonabl
34d20 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e  e approximation.
34d30 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   */.    pOut->u.
34d40 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  i = -1;.  }else{
34d50 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
34d60 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   x;.  }.  break;
34d70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
34d80 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a  fNotZero P1 P2 *
34d90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
34da0 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68  : if r[P1]!=0 th
34db0 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f  en r[P1]--, goto
34dc0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
34dd0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
34de0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
34df0 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
34e00 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
34e10 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72  .** initially gr
34e20 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
34e30 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20   then decrement 
34e40 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
34e50 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20  ister P1..** If 
34e60 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28  it is non-zero (
34e70 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
34e80 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61  tive) and then a
34e90 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  lso jump to P2. 
34ea0 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72   .** If register
34eb0 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
34ec0 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20   zero, leave it 
34ed0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61  unchanged and fa
34ee0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
34ef0 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f  ase OP_IfNotZero
34f00 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
34f10 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
34f20 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
34f30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
34f40 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
34f50 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
34f60 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
34f70 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
34f80 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20  n1->u.i ){.     
34f90 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
34fa0 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20  ) pIn1->u.i--;. 
34fb0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
34fc0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
34fd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
34fe0 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20  DecrJumpZero P1 
34ff0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
35000 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31  psis: if (--r[P1
35010 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  ])==0 goto P2.**
35020 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
35030 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74  must hold an int
35040 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74  eger.  Decrement
35050 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31   the value in P1
35060 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  .** and jump to 
35070 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  P2 if the new va
35080 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a  lue is exactly z
35090 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
350a0 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20  DecrJumpZero: { 
350b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
350c0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
350d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
350e0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
350f0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
35100 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53   if( pIn1->u.i>S
35110 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
35120 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
35130 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
35140 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
35150 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
35160 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
35170 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
35180 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  }.../* Opcode: A
35190 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
351a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
351b0 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
351c0 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
351d0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78  ** Execute the x
351e0 53 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  Step function fo
351f0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a  r an aggregate..
35200 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  ** The function 
35210 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
35220 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  .  P4 is a point
35230 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75  er to the .** Fu
35240 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
35250 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
35260 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
35270 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
35280 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
35290 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
352a0 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
352b0 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
352c0 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
352d0 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
352e0 4f 70 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72  Opcode: AggInver
352f0 73 65 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  se * P2 P3 P4 P5
35300 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
35310 63 75 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73  cum=r[P3] invers
35320 65 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  e(r[P2@P5]).**.*
35330 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78 49  * Execute the xI
35340 6e 76 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20  nverse function 
35350 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
35360 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f  ..** The functio
35370 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
35380 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69  ts.  P4 is a poi
35390 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20  nter to the .** 
353a0 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
353b0 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
353c0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
353d0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
353e0 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f  he.** accumulato
353f0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
35400 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
35410 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
35420 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
35430 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f  successors..*/./
35440 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
35450 70 31 20 50 31 20 50 32 20 50 33 20 50 34 20 50  p1 P1 P2 P3 P4 P
35460 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
35470 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
35480 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
35490 45 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65  Execute the xSte
354a0 70 20 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20  p (if P1==0) or 
354b0 78 49 6e 76 65 72 73 65 20 28 69 66 20 50 31 21  xInverse (if P1!
354c0 3d 30 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  =0) function for
354d0 20 61 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65   an.** aggregate
354e0 2e 20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  .  The function 
354f0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
35500 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  .  P4 is a point
35510 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75  er to the .** Fu
35520 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
35530 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
35540 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
35550 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
35560 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
35570 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
35580 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
35590 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
355a0 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
355b0 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20  ccessors..**.** 
355c0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69  This opcode is i
355d0 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
355e0 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20  s OP_AggStep0.  
355f0 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  On first evaluat
35600 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63  ion,.** the Func
35610 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34  Def stored in P4
35620 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   is converted in
35630 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
35640 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65  ntext and.** the
35650 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67   opcode is chang
35660 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79  ed.  In this way
35670 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  , the initializa
35680 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
35690 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
356a0 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65  nly happens once
356b0 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20  , instead of on 
356c0 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65  each call to the
356d0 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f  .** step functio
356e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  n..*/.case OP_Ag
356f0 67 49 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f  gInverse:.case O
35700 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
35710 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt n;.  sqlite3_
35720 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
35730 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
35740 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
35750 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  F );.  n = pOp->
35760 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p5;.  assert( pO
35770 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
35780 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
35790 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
357a0 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
357b0 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
357c0 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
357d0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
357e0 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
357f0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
35800 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
35810 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
35820 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
35830 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e  allocRawNN(db, n
35840 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
35850 76 61 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20  value*) +.      
35860 20 20 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66           (sizeof
35870 28 70 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65  (pCtx[0]) + size
35880 6f 66 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66  of(Mem) - sizeof
35890 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
358a0 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
358b0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
358c0 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20  .  pCtx->pMem = 
358d0 30 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  0;.  pCtx->pOut 
358e0 3d 20 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e  = (Mem*)&(pCtx->
358f0 61 72 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69  argv[n]);.  sqli
35900 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70  te3VdbeMemInit(p
35910 43 74 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d  Ctx->pOut, db, M
35920 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
35930 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  ->pFunc = pOp->p
35940 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d  4.pFunc;.  pCtx-
35950 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70  >iOp = (int)(pOp
35960 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d   - aOp);.  pCtx-
35970 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43  >pVdbe = p;.  pC
35980 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
35990 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
359a0 72 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61  r = 0;.  pCtx->a
359b0 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e  rgc = n;.  pOp->
359c0 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43  p4type = P4_FUNC
359d0 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70  CTX;.  pOp->p4.p
359e0 43 74 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f  Ctx = pCtx;..  /
359f0 2a 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20  * OP_AggInverse 
35a00 6d 75 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20  must have P1==1 
35a10 61 6e 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d  and OP_AggStep m
35a20 75 73 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a  ust have P1==0 *
35a30 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
35a40 3e 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  >p1==(pOp->opcod
35a50 65 3d 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  e==OP_AggInverse
35a60 29 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63  ) );..  pOp->opc
35a70 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
35a80 31 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  1;.  /* Fall thr
35a90 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67  ough into OP_Agg
35aa0 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  Step */.}.case O
35ab0 50 5f 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20  P_AggStep1: {.  
35ac0 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
35ad0 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
35ae0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20    Mem *pMem;..  
35af0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
35b00 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20  ype==P4_FUNCCTX 
35b10 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d  );.  pCtx = pOp-
35b20 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d  >p4.pCtx;.  pMem
35b30 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
35b40 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
35b50 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
35b60 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p->p1 ){.    /* 
35b70 54 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67  This is an OP_Ag
35b80 67 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20  gInverse call.  
35b90 56 65 72 69 66 79 20 74 68 61 74 20 78 53 74 65  Verify that xSte
35ba0 70 20 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20  p has always.   
35bb0 20 2a 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20   ** been called 
35bc0 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72  at least once pr
35bd0 69 6f 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65  ior to any xInve
35be0 72 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20  rse call. */.   
35bf0 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75   assert( pMem->u
35c00 54 65 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33  Temp==0x1122e0e3
35c10 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
35c20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f   /* This is an O
35c30 50 5f 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20  P_AggStep call. 
35c40 20 4d 61 72 6b 20 69 74 20 61 73 20 73 75 63 68   Mark it as such
35c50 2e 20 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75  . */.    pMem->u
35c60 54 65 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65  Temp = 0x1122e0e
35c70 33 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  3;.  }.#endif.. 
35c80 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63   /* If this func
35c90 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f  tion is inside o
35ca0 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  f a trigger, the
35cb0 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
35cc0 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d  in aMem[].  ** m
35cd0 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d  ight change from
35ce0 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   one evaluation 
35cf0 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68  to the next.  Th
35d00 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
35d10 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73  code.  ** checks
35d20 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72   to see if the r
35d30 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61  egister array ha
35d40 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69  s changed, and i
35d50 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69  f so it.  ** rei
35d60 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72  nitializes the r
35d70 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66  elavant parts of
35d80 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e   the sqlite3_con
35d90 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  text object */. 
35da0 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20   if( pCtx->pMem 
35db0 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70  != pMem ){.    p
35dc0 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d  Ctx->pMem = pMem
35dd0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78  ;.    for(i=pCtx
35de0 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20  ->argc-1; i>=0; 
35df0 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b  i--) pCtx->argv[
35e00 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  i] = &aMem[pOp->
35e10 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64  p2+i];.  }..#ifd
35e20 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
35e30 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
35e40 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
35e50 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
35e60 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
35e70 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
35e80 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
35e90 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
35ea0 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
35eb0 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20  ..  pMem->n++;. 
35ec0 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70   assert( pCtx->p
35ed0 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  Out->flags==MEM_
35ee0 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74  Null );.  assert
35ef0 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d  ( pCtx->isError=
35f00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
35f10 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d  pCtx->skipFlag==
35f20 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 );.#ifndef SQL
35f30 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
35f40 55 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  UNC.  if( pOp->p
35f50 31 20 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e  1 ){.    (pCtx->
35f60 70 46 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29  pFunc->xInverse)
35f70 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63  (pCtx,pCtx->argc
35f80 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20  ,pCtx->argv);.  
35f90 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28  }else.#endif.  (
35fa0 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
35fb0 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e  unc)(pCtx,pCtx->
35fc0 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29  argc,pCtx->argv)
35fd0 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
35fe0 35 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66  5-23230 */..  if
35ff0 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20  ( pCtx->isError 
36000 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
36010 3e 69 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20  >isError>0 ){.  
36020 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
36030 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
36040 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
36050 28 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20  (pCtx->pOut));. 
36060 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
36070 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
36080 20 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69     if( pCtx->ski
36090 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61  pFlag ){.      a
360a0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
360b0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
360c0 71 20 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70  q );.      i = p
360d0 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20  Op[-1].p1;.     
360e0 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33   if( i ) sqlite3
360f0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
36100 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20  &aMem[i], 1);.  
36110 20 20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c      pCtx->skipFl
36120 61 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ag = 0;.    }.  
36130 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
36140 52 65 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f  Release(pCtx->pO
36150 75 74 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70  ut);.    pCtx->p
36160 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
36170 5f 4e 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d  _Null;.    pCtx-
36180 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  >isError = 0;.  
36190 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
361a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
361b0 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  or;.  }.  assert
361c0 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c  ( pCtx->pOut->fl
361d0 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  ags==MEM_Null );
361e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d  .  assert( pCtx-
361f0 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a  >skipFlag==0 );.
36200 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
36210 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
36220 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
36230 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
36240 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a  r[P1] N=P2.**.**
36250 20 50 31 20 69 73 20 74 68 65 20 6d 65 6d 6f 72   P1 is the memor
36260 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
36270 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
36280 6f 72 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  or for an aggreg
36290 61 74 65 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77  ate.** or window
362a0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 45 78 65 63   function.  Exec
362b0 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
362c0 72 20 66 75 6e 63 74 69 6f 6e 20 0a 2a 2a 20 66  r function .** f
362d0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  or an aggregate 
362e0 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
362f0 73 75 6c 74 20 69 6e 20 50 31 2e 0a 2a 2a 0a 2a  sult in P1..**.*
36300 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
36310 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
36320 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
36330 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
36340 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
36350 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
36360 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
36370 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
36380 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
36390 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
363a0 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
363b0 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
363c0 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
363d0 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
363e0 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
363f0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
36400 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
36410 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
36420 64 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  ded for the case
36430 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
36440 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
36450 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
36460 61 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  alled..*/./* Opc
36470 6f 64 65 3a 20 41 67 67 56 61 6c 75 65 20 2a 20  ode: AggValue * 
36480 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
36490 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 61  nopsis: r[P3]=va
364a0 6c 75 65 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  lue N=P2.**.** I
364b0 6e 76 6f 6b 65 20 74 68 65 20 78 56 61 6c 75 65  nvoke the xValue
364c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  () function and 
364d0 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
364e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
364f0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
36500 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
36510 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
36520 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
36530 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
36540 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
36550 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
36560 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
36570 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
36580 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
36590 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
365a0 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
365b0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
365c0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
365d0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
365e0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
365f0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
36600 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
36610 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
36620 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
36630 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
36640 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
36650 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
36660 61 73 65 20 4f 50 5f 41 67 67 56 61 6c 75 65 3a  ase OP_AggValue:
36670 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
36680 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
36690 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
366a0 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
366b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
366c0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
366d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
366e0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
366f0 65 3d 3d 4f 50 5f 41 67 67 56 61 6c 75 65 20 29  e==OP_AggValue )
36700 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  ;.  pMem = &aMem
36710 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
36720 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
36730 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
36740 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 23  EM_Agg))==0 );.#
36750 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36760 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
36770 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
36780 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
36790 64 62 65 4d 65 6d 41 67 67 56 61 6c 75 65 28 70  dbeMemAggValue(p
367a0 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Mem, &aMem[pOp->
367b0 70 33 5d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  p3], pOp->p4.pFu
367c0 6e 63 29 3b 0a 20 20 20 20 70 4d 65 6d 20 3d 20  nc);.    pMem = 
367d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
367e0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
367f0 20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   {.    rc = sqli
36800 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
36810 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
36820 2e 70 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 0a  .pFunc);.  }.  .
36830 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
36840 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
36850 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
36860 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
36870 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
36880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36890 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
368a0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
368b0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
368c0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
368d0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
368e0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
368f0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
36900 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
36910 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
36920 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
36930 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
36940 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
36950 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
36960 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
36970 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
36980 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
36990 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
369a0 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
369b0 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
369c0 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
369d0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
369e0 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
369f0 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
36a00 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
36a10 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
36a20 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
36a30 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
36a40 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
36a50 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
36a60 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
36a70 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
36a80 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
36a90 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
36aa0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
36ab0 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
36ac0 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
36ad0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
36ae0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
36af0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
36b00 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
36b10 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
36b20 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
36b30 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
36b40 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
36b50 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
36b60 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
36b70 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
36b80 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ba0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
36bb0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
36bc0 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
36bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
36be0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
36bf0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
36c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
36c10 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
36c20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
36c30 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
36c40 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
36c50 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
36c60 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
36c70 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
36c80 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
36c90 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
36ca0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
36cb0 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
36cc0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
36cd0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
36ce0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
36cf0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
36d00 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
36d10 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
36d20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
36d30 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
36d40 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
36d50 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
36d60 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
36d70 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
36d80 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
36d90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36da0 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
36db0 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
36dc0 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
36dd0 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
36de0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
36df0 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
36e00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
36e10 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
36e20 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
36e30 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
36e40 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
36e50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36e60 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
36e70 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
36e80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
36e90 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
36ea0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
36eb0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
36ec0 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
36ed0 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
36ee0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
36ef0 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
36f00 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
36f10 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
36f20 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
36f30 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
36f40 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
36f50 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
36f60 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
36f70 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
36f80 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
36f90 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
36fa0 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
36fb0 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
36fc0 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
36fd0 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
36fe0 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
36ff0 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
37000 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
37010 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
37020 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
37030 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
37040 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
37050 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
37060 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
37070 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
37080 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
37090 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370b0 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
370c0 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
370d0 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
370e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370f0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
37100 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
37110 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
37120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
37130 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
37140 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
37150 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
37160 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
37170 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
37180 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
37190 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
371a0 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
371b0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
371c0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
371d0 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
371e0 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
371f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37200 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
37210 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
37220 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
37230 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
37240 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
37250 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
37260 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
37270 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
37280 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
37290 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
372a0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
372b0 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
372c0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
372d0 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
372e0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
372f0 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
37300 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
37310 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
37320 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
37330 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
37340 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
37350 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
37360 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
37370 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
37380 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
37390 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
373a0 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
373b0 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
373c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
373d0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
373e0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
373f0 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
37400 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
37410 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
37420 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
37430 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37440 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
37450 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
37460 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
37470 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
37480 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
37490 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
374a0 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
374b0 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
374c0 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
374d0 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
374e0 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
374f0 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
37500 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
37510 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37520 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
37530 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
37540 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
37550 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
37560 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
37570 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
37580 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
37590 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
375a0 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
375b0 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
375c0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
375d0 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
375e0 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
375f0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37600 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
37610 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37620 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
37630 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
37640 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
37650 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
37660 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
37670 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
37680 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
37690 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
376a0 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
376b0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
376c0 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
376d0 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
376e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
376f0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
37700 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
37710 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
37720 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37730 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
37740 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
37750 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37760 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
37770 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
37780 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
37790 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
377a0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
377b0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
377c0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
377d0 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
377e0 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
377f0 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
37800 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
37810 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
37820 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
37830 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
37840 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
37850 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
37860 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
37870 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
37880 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
37890 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
378a0 67 65 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20  ger, db);.      
378b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
378c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
378d0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
378e0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
378f0 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20  er, eNew);.     
37900 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
37910 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
37920 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
37930 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ORY ){.        /
37940 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74  * Cannot transit
37950 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f  ion directly fro
37960 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e  m MEMORY to WAL.
37970 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20    Use mode OFF. 
37980 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
37990 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a  intermediate */.
379a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
379b0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
379c0 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52  de(pPager, PAGER
379d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
379e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  );.      }.  .  
379f0 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72      /* Open a tr
37a00 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
37a10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
37a20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
37a30 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  e journal.      
37a40 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72  ** mode, this tr
37a50 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73  ansaction always
37a60 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b   uses a rollback
37a70 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20   journal..      
37a80 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
37a90 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
37aa0 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29  nTrans(pBt)==0 )
37ab0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
37ac0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
37ad0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
37ae0 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
37af0 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47  (pBt, (eNew==PAG
37b00 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
37b10 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20  AL ? 2 : 1));.  
37b20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
37b30 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66  #endif /* ifndef
37b40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
37b50 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20   */..  if( rc ) 
37b60 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65  eNew = eOld;.  e
37b70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
37b80 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
37b90 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
37ba0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
37bb0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
37bc0 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
37bd0 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
37be0 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
37bf0 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
37c00 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
37c10 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
37c20 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
37c30 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
37c40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
37c50 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
37c60 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
37c70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37c80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37c90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
37ca0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
37cb0 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
37cc0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
37cd0 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
37ce0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
37cf0 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
37d00 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
37d10 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
37d20 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
37d30 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 50  ntire database P
37d40 31 2e 20 20 50 31 20 69 73 20 30 20 66 6f 72 20  1.  P1 is 0 for 
37d50 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72  "main", and 2 or
37d60 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20   more.** for an 
37d70 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
37d80 65 2e 20 20 54 68 65 20 22 74 65 6d 70 22 20 64  e.  The "temp" d
37d90 61 74 61 62 61 73 65 20 6d 61 79 20 6e 6f 74 20  atabase may not 
37da0 62 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a 2a 0a  be vacuumed..**.
37db0 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20  ** If P2 is not 
37dc0 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
37dd0 20 61 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64   a register hold
37de0 69 6e 67 20 61 20 73 74 72 69 6e 67 20 77 68 69  ing a string whi
37df0 63 68 20 69 73 0a 2a 2a 20 74 68 65 20 66 69 6c  ch is.** the fil
37e00 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74 68 65  e into which the
37e10 20 72 65 73 75 6c 74 20 6f 66 20 76 61 63 75 75   result of vacuu
37e20 6d 20 73 68 6f 75 6c 64 20 62 65 20 77 72 69 74  m should be writ
37e30 74 65 6e 2e 20 20 57 68 65 6e 0a 2a 2a 20 50 32  ten.  When.** P2
37e40 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 76 61   is zero, the va
37e50 63 75 75 6d 20 6f 76 65 72 77 72 69 74 65 73 20  cuum overwrites 
37e60 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
37e70 61 62 61 73 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abase..*/.case O
37e80 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
37e90 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
37ea0 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
37eb0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
37ec0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
37ed0 20 70 4f 70 2d 3e 70 31 2c 0a 20 20 20 20 20 20   pOp->p1,.      
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ef0 20 20 70 4f 70 2d 3e 70 32 20 3f 20 26 61 4d 65    pOp->p2 ? &aMe
37f00 6d 5b 70 4f 70 2d 3e 70 32 5d 20 3a 20 30 29 3b  m[pOp->p2] : 0);
37f10 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
37f20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37f30 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
37f40 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
37f50 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
37f60 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20  _AUTOVACUUM)./* 
37f70 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75  Opcode: IncrVacu
37f80 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  um P1 P2 * * *.*
37f90 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73  *.** Perform a s
37fa0 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68  ingle step of th
37fb0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61  e incremental va
37fc0 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f  cuum procedure o
37fd0 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61  n.** the P1 data
37fe0 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63  base. If the vac
37ff0 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64  uum has finished
38000 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
38010 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68  ction.** P2. Oth
38020 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
38030 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
38040 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
38050 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63  .case OP_IncrVac
38060 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  uum: {        /*
38070 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65   jump */.  Btree
38080 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
38090 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
380a0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
380b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
380c0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
380d0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
380e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
380f0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
38100 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
38110 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
38120 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
38130 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
38140 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
38150 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  n(rc==SQLITE_DON
38160 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  E,2);.  if( rc )
38170 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  {.    if( rc!=SQ
38180 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f  LITE_DONE ) goto
38190 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
381a0 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  ror;.    rc = SQ
381b0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74  LITE_OK;.    got
381c0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
381d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
381e0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
381f0 45 78 70 69 72 65 20 50 31 20 50 32 20 2a 20 2a  Expire P1 P2 * *
38200 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
38210 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
38220 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
38230 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
38240 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
38250 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
38260 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
38270 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
38280 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
38290 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
382a0 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
382b0 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inall