/ Hex Artifact Content
Login

Artifact 2d1338273ff6d6430c0d7b88afbd8f4683df0d23980ab1e638a6b490e9766e80:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
26d0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
26e0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
26f0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
2700: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
2710: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
2720: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
2730: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
2740: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
2750: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
2760: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2770: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
2780: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
2790: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
27a0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
27b0: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
27c0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
27d0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
27e0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
27f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
2800: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
2810: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2820: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2830: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
2840: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
2850: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
2860: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
2870: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
2880: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
2890: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
28a0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
28b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
28c0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
28d0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
28e0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
28f0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2900: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2910: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2920: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2930: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2940: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2950: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2960: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2970: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2980: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2990: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
29a0: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
29b0: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
29c0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
29d0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
29e0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
29f0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2a00: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2a10: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
2a20: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2a30: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
2a40: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2a50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2a60: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2a80: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2a90: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2aa0: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2ab0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2ac0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2ad0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2ae0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2af0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2b00: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2b10: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
2b20: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
2b30: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
2b40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
2b50: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
2b60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
2b70: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
2b80: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2b90: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
2ba0: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2bb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2bc0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
2bd0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
2be0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
2bf0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2c00: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2c10: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2c20: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2c30: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2c40: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2c50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2c70: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2c80: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2c90: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ca0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2cb0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2cc0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2cd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2ce0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2cf0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2d00: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2d10: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2d20: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2d30: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2d40: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2d50: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2d60: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
2d70: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
2d80: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
2d90: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
2da0: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
2db0: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
2dc0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
2dd0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
2de0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
2df0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
2e00: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2e10: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
2e20: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
2e30: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
2e40: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2e50: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2e60: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
2e70: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
2e80: 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29  fy(pRec, enc, 1)
2e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ea0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2eb0: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2ec0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2ed0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2ee0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2ef0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2f00: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2f10: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2f20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2f30: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2f40: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2f50: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2f60: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2f70: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2f80: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2f90: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2fa0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2fb0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2fc0: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2fd0: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2fe0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2ff0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
3000: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
3010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
3020: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
3030: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3040: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
3050: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
3060: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
3070: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
3080: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
3090: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
30a0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
30b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
30c0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
30d0: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
30e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
30f0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
3100: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
3110: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
3120: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
3130: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
3140: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
3150: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3160: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
3170: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
3180: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
3190: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
31a0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
31b0: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
31c0: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
31d0: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
31e0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
31f0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
3200: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
3210: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
3220: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
3230: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
3240: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
3250: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
3260: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
3270: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
3280: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
3290: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
32a0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
32b0: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
32c0: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
32d0: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
32e0: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
32f0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
3300: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3310: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3320: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
3330: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
3340: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3350: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
3360: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
3370: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3380: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
3390: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
33a0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
33b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
33c0: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
33d0: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
33e0: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
33f0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
3400: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3410: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3420: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3430: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3440: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3450: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3460: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
3470: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
3480: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
3490: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
34a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
34b0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
34c0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
34d0: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
34e0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
34f0: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3500: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3510: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3520: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3530: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3540: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3550: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3560: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3570: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
3590: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
35a0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
35b0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
35c0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
35d0: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
35e0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
35f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3600: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3610: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3630: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3640: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3650: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3660: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
3670: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3680: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
3690: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
36a0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
36b0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
36c0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
36d0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
36e0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
36f0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3700: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3710: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3720: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3730: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3740: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3750: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3760: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
3770: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3780: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3790: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
37a0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
37b0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
37c0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
37d0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
37e0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
37f0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3800: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3810: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3820: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3830: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3840: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3850: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3860: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3870: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
3880: 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74  ) = c;.    sqlit
3890: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
38a0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
38b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
38c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
38d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
38e0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
38f0: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3910: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3920: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3930: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3940: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3950: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3960: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3970: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3980: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3990: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
39a0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
39b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
39c0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
39d0: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
39e0: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
39f0: 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a  z;.    }.    *(z
3a00: 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20  Csr++) = ']';.  
3a10: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
3a20: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
3a30: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3a40: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
3a50: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
3a60: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3a70: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3a80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
3a90: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
3aa0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3ab0: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
3ac0: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
3ad0: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
3ae0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3af0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
3b00: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3b10: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3b20: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
3b30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3b40: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
3b50: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3b60: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
3b70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3b80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3b90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3ba0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3bb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
3bc0: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
3bd0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3be0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3bf0: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3c00: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
3c10: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
3c20: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
3c30: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3c40: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
3c50: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
3c60: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3c70: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3c80: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3c90: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3ca0: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3cb0: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3cc0: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3cd0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3ce0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3cf0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3d00: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
3d10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3d20: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3d30: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3d40: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3d50: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3d60: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3d70: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3d80: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3d90: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3da0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3db0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3dc0: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
3dd0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3de0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
3df0: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
3e00: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
3e10: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
3e20: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
3e30: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d   memTracePrint(M
3e40: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  em *p){.  if( p-
3e50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64  >flags & MEM_Und
3e60: 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72  efined ){.    pr
3e70: 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64  intf(" undefined
3e80: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3ea0: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  ull ){.    print
3eb0: 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  f(p->flags & MEM
3ec0: 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e  _Zero ? " NULL-n
3ed0: 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22  ochng" : " NULL"
3ee0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3ef0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3f00: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3f10: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3f20: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3f30: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3f40: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3f50: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3f60: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3f70: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3f80: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3f90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3fa0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3fb0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3fc0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3fd0: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3fe0: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3ff0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
4000: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
4010: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4020: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4030: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4040: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4050: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4060: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4070: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4080: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4090: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
40a0: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
40b0: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
40c0: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
40d0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
40e0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
40f0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4100: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4110: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4120: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4130: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4140: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4150: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4160: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4170: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4180: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4190: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
41a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
41b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
41c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
41d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
41e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
41f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4200: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4210: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4220: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4230: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4240: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4250: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4260: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4270: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4280: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4290: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
42a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
42b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
42c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
42d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
42e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
42f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4300: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4310: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4320: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4330: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4340: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4350: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4360: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4370: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4380: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4390: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
43a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
43b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
43c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
43d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
43e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
43f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4400: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4410: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4420: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4430: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4440: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4450: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4460: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4470: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4480: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4490: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
44a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
44b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
44c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
44d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
44e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
44f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4500: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4510: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4520: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4530: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4540: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4550: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4570: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4580: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4590: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
45a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
45b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
45c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
45d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
45e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
45f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4600: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4610: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4620: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4630: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4660: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4670: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4680: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4690: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
46a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
46b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
46c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
46d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
46e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
46f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4700: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4710: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4720: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4730: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4740: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4750: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4760: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4770: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4780: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
47a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
47b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
47c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
47d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
47e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4800: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4810: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4820: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4830: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4840: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4860: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4870: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4880: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4890: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
48a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
48b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
48c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
48d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
48e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
48f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4900: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4910: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4920: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4930: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4940: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4950: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4960: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4970: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4980: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4990: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
49a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
49b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
49c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
49d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
49e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
49f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4a00: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4a10: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4a20: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4a30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4a40: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4a50: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4a70: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4a80: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4a90: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
4aa0: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
4ab0: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
4ac0: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
4ad0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4ae0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4af0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4b00: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4b10: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
4b30: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4b40: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
4b50: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4b60: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
4b70: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4b80: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
4b90: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
4ba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4bb0: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
4bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
4bd0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
4be0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4bf0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4c10: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
4c20: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
4c30: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
4c40: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
4c50: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
4c60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
4c70: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4c80: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4c90: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4ca0: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
4cc0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4cd0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4ce0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4cf0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4d00: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4d10: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4d20: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4d30: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4d40: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4d50: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4d60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4d70: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4d80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
4d90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
4da0: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
4db0: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
4dc0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
4dd0: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
4de0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4df0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4e00: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4e10: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4e20: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4e30: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4e40: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e50: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e60: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e70: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e80: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4ea0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4eb0: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4ec0: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4ed0: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4ee0: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ef0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4f00: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4f10: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4f20: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4f30: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4f40: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f50: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f60: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f70: 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67  }else{.    nProg
4f80: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66  ressLimit = 0xff
4f90: 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64  ffffff;.  }.#end
4fa0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4fb0: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4fc0: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4fd0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4fe0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4ff0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
5000: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
5010: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
5020: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
5030: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
5040: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
5050: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
5060: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5070: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5080: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5090: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
50a0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
50b0: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
50c0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
50d0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
50e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
50f0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5100: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
5110: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
5120: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
5130: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5140: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5150: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5160: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5170: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5180: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5190: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
51a0: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
51b0: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
51c0: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
51d0: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
51e0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
51f0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5200: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5210: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5220: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5230: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5240: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5250: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5260: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5270: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5280: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5290: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
52a0: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
52b0: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
52c0: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
52d0: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
52e0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
52f0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5300: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5310: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5320: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5330: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5340: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5350: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5360: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5370: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5380: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f  te3NProfileCnt ?
5390: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
53a0: 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74  Cnt : sqlite3Hwt
53b0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
53c0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
53d0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
53e0: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
53f0: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
5400: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
5410: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
5420: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
5430: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
5440: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
5450: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
5460: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
5470: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5480: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
5490: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
54a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
54b0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
54c0: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
54d0: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
54e0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
54f0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
5500: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
5510: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
5520: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
5530: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
5540: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
5550: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
5560: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
5570: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
5580: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5590: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
55a0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
55b0: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
55c0: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
55d0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
55e0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
55f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5600: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5610: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5620: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
5630: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
5640: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
5650: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5660: 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  UG.    {.      u
5670: 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73  8 opProperty = s
5680: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
5690: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
56a0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  ];.      if( (op
56b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
56c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p1>0 );.       
56f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5700: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
5710: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5720: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5730: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5740: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
5750: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5760: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5770: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5780: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
5790: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
57a0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d  ACE(pOp->p1, &aM
57b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  em[pOp->p1]);.  
57c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
57d0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
57e0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
57f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5800: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5810: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5820: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
5830: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5840: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5850: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5860: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
5870: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
5880: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5890: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
58a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
58b0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
58c0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
58d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
58e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
58f0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5900: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5910: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5920: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5930: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5940: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5950: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5960: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5970: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5980: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5990: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
59a0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
59b0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
59c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
59d0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
59e0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
59f0: 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
5a00: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5a10: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5a20: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  y & OPFLG_OUT2)!
5a30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5a40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5a50: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5a60: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5a70: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
5a80: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
5a90: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
5aa0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5ab0: 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
5ac0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5ad0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
5ae0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5af0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5b00: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5b10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5b20: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5b30: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5b40: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5b50: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5b60: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
5b70: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
5b80: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
5b90: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
5ba0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
5bb0: 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b    pOrigOp = pOp;
5bc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5bd0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
5be0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c30: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5c40: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
5c50: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
5c60: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
5c70: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5c80: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5c90: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5ca0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5cb0: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5cc0: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5cd0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
5ce0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
5cf0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
5d00: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
5d10: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
5d20: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
5d30: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5d40: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
5d50: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5d60: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5d70: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5d80: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5d90: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5da0: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5db0: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5dc0: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5dd0: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5de0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5df0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5e00: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5e10: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5e20: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5e30: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5e40: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
5e50: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5e60: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5e70: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5e80: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5e90: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5ea0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5eb0: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5ec0: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5ed0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5ee0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5ef0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5f00: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5f10: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5f20: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5f30: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5f40: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5f50: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5f60: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5f70: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5f80: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5f90: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5fa0: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5fb0: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5fc0: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5fd0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5fe0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5ff0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
6000: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
6010: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
6020: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
6030: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6040: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6050: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6060: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6070: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6080: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6090: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
60a0: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
60b0: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
60c0: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
60d0: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
60e0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
60f0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
6100: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
6110: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
6120: 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  n3, out2, out3. 
6130: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
6140: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
6150: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
6160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
6170: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
6180: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
6190: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
61a0: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
61b0: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
61c0: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
61d0: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
61e0: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
61f0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
6200: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
6210: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
6220: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
6230: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
6240: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
6250: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
6260: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
6270: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
6280: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
6290: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
62a0: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
62b0: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
62c0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
62d0: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
62e0: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6330: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
6340: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
6350: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
6360: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
6370: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6380: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
6390: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
63a0: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
63b0: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
63c0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
63d0: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
63e0: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
63f0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
6400: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
6410: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
6420: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
6430: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
6440: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
6450: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
6460: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
6470: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
6480: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
6490: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
64a0: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
64b0: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
64c0: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
64d0: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
64e0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
64f0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
6500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
6510: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
6520: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70   /* jump */.jump
6530: 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
6540: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
6550: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
6560: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a  ->p2 - 1];..  /*
6570: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
6580: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
6590: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
65a0: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
65b0: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
65c0: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
65d0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
65e0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
65f0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
6600: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
6610: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
6620: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
6630: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
6640: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
6650: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
6660: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
6670: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
6680: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
6690: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
66a0: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
66b0: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
66c0: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
66d0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
66e0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
66f0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
6700: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
6710: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
6720: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
6730: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
6740: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
6750: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
6760: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
6770: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
6780: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
6790: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
67a0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
67b0: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
67c0: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
67d0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
67e0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
67f0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
6800: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6810: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
6820: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6830: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
6840: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
6850: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6860: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
6870: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
6880: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
6890: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
68a0: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
68b0: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
68c0: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
68d0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
68e0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
68f0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
6900: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6910: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
6920: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
6930: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
6940: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
6950: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
6960: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
6970: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
6980: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
6990: 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53 74    */.  if( nVmSt
69a0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
69b0: 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72  it && db->xProgr
69c0: 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  ess!=0 ){.    as
69d0: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
69e0: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
69f0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
6a00: 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e  = nVmStep + db->
6a10: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
6a20: 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f  nVmStep%db->nPro
6a30: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69  gressOps);.    i
6a40: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
6a50: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
6a60: 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  g) ){.      rc =
6a70: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
6a80: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
6a90: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
6aa0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
6ab0: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
6ac0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6ad0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
6ae0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
6af0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
6b00: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
6b10: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
6b20: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6b30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
6b40: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
6b50: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6b60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6b70: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
6b80: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6b90: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
6ba0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6bb0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
6bc0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
6bd0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
6be0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
6bf0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6c00: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6c10: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
6c20: 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53  Op-aOp);.  REGIS
6c30: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6c40: 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20  1, pIn1);..  /* 
6c50: 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74  Most jump operat
6c60: 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74  ions do a goto t
6c70: 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f  o this spot in o
6c80: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20  rder to update. 
6c90: 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e   ** the pOp poin
6ca0: 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  ter. */.jump_to_
6cb0: 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  p2:.  pOp = &aOp
6cc0: 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
6cd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6ce0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6cf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6d00: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6d10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6d20: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
6d30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
6d40: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
6d50: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
6d60: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
6d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
6d80: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
6d90: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
6da0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6db0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
6dc0: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
6dd0: 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  t );.  pOp = &aO
6de0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
6df0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6e00: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6e10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6e20: 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  de: InitCoroutin
6e30: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
6e40: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69  *.** Set up regi
6e50: 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20  ster P1 so that 
6e60: 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f  it will Yield to
6e70: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a   the coroutine.*
6e80: 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64  * located at add
6e90: 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ress P3..**.** I
6ea0: 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65  f P2!=0 then the
6eb0: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6ec0: 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69  mentation immedi
6ed0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a  ately follows.**
6ee0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53   this opcode.  S
6ef0: 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20  o jump over the 
6f00: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
6f10: 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61  entation to.** a
6f20: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a  ddress P2..**.**
6f30: 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f   See also: EndCo
6f40: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6f50: 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  OP_InitCoroutine
6f60: 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  : {     /* jump 
6f70: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
6f80: 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e  ->p1>0 &&  pOp->
6f90: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
6fa0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6fb0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6fc0: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
6fd0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
6fe0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
6ff0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
7000: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
7010: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7020: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
7030: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
7040: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7050: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
7060: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7070: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
7080: 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
7090: 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
70a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
70b0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
70c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
70d0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
70e0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
70f0: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
7100: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
7110: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
7120: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
7130: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
7140: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7150: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7160: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7170: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7180: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
7190: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
71a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
71b0: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
71c0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
71d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
71e0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
71f0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
7200: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
7210: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
7220: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
7230: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
7240: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
7250: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
7260: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
7270: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
7280: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
7290: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
72a0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43  .  pOp = &aOp[pC
72b0: 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a  aller->p2 - 1];.
72c0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
72d0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
72e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
72f0: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
7300: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
7310: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
7320: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
7330: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7340: 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20  er P1.  This.** 
7350: 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
7360: 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20  f yielding to a 
7370: 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a  coroutine..**.**
7380: 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   If the coroutin
7390: 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68  e that is launch
73a0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
73b0: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
73c0: 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74  .** Yield or Ret
73d0: 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75  urn then continu
73e0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  e to the next in
73f0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
7400: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74  if.** the corout
7410: 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20  ine launched by 
7420: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7430: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e   ends with.** En
7440: 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e  dCoroutine, then
7450: 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68   jump to P2 rath
7460: 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69  er than continui
7470: 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e  ng with the.** n
7480: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
7490: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
74a0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
74b0: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
74c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
74d0: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
74e0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
74f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7500: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
7510: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
7520: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
7530: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
7540: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
7550: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
7560: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
7570: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
7580: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7590: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
75a0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65   pOp = &aOp[pcDe
75b0: 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st];.  break;.}.
75c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
75d0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
75e0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
75f0: 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75  sis: if r[P3]=nu
7600: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
7610: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
7620: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
7630: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
7640: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
7650: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
7660: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
7670: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
7680: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
7690: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
76a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
76b0: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
76c0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
76d0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
76e0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
76f0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
7700: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
7710: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
7720: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
7730: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
7740: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
7750: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
7760: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
7770: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
7780: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
7790: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
77a0: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
77b0: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
77c0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
77d0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
77e0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
77f0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
7800: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
7810: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7820: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
7830: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
7840: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
7850: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
7860: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
7870: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
7880: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
7890: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
78a0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
78b0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
78c0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
78d0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
78e0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
78f0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
7900: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
7910: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
7920: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
7930: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
7940: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
7950: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
7960: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
7970: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
7980: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7990: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
79a0: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
79b0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
79c0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
79d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
79e0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
79f0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
7a00: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
7a10: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
7a20: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
7a30: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
7a40: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
7a50: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
7a60: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
7a70: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
7a80: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
7a90: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
7aa0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7ab0: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
7ac0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7ad0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
7ae0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
7af0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7b00: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
7b10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7b20: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
7b30: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
7b40: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
7b50: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
7b60: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
7b70: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7b80: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7b90: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7ba0: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7bb0: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
7bc0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
7bd0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
7be0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
7bf0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
7c00: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
7c10: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
7c20: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
7c30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7c40: 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d 65  t: {.  VdbeFrame
7c50: 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74 20   *pFrame;.  int 
7c60: 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28 69  pcx;..  pcx = (i
7c70: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7c80: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
7c90: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
7ca0: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
7cb0: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
7cc0: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
7cd0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
7ce0: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
7cf0: 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
7d00: 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61  ame;.    p->pFra
7d10: 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61  me = pFrame->pPa
7d20: 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72  rent;.    p->nFr
7d30: 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74  ame--;.    sqlit
7d40: 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
7d50: 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
7d60: 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69  ;.    pcx = sqli
7d70: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
7d80: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
7d90: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7da0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7db0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7dc0: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7dd0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7de0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7df0: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7e00: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7e10: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7e20: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7e30: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7e40: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7e50: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7e60: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7e70: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7e80: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
7e90: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
7ea0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
7eb0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
7ec0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
7ed0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
7ee0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7ef0: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7f00: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
7f10: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
7f20: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7f30: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7f40: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
7f50: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
7f60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
7f70: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7f80: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7f90: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7fa0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
7fb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7fc0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
7fd0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
7fe0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
7ff0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8000: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
8010: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8020: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8030: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8070: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
8080: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
8090: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
80a0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
80b0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
80c0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
80d0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
80e0: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
80f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8100: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
8110: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8120: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8130: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8140: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8150: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8160: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8170: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
8180: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
8190: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
81a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
81b0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
81c0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
81d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
81e0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
81f0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
8200: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
8210: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8220: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8230: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8240: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8250: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8260: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8270: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8280: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
8290: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
82a0: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
82b0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
82c0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
82d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
82e0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
82f0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8300: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8310: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8320: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8330: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8340: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8350: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8360: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8370: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8380: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
8390: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
83a0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
83b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
83c0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
83d0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
83e0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
83f0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8400: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8410: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8420: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8430: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8440: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8450: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8460: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8470: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8480: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
8490: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
84a0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
84b0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
84c0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
84d0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
84e0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
84f0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8500: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8510: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8520: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8530: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8540: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8550: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8560: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8570: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8580: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
8590: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
85a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
85b0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
85c0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
85d0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85e0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
85f0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8600: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8610: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8620: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8630: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8640: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8650: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8660: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8670: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8680: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8690: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
86a0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
86b0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
86c0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
86d0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
86e0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
86f0: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8700: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8710: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8720: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8730: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8740: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8750: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8760: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8770: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8780: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8790: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
87a0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
87b0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
87c0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
87d0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
87e0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
87f0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8800: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8810: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8820: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8830: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8840: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8850: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8860: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8870: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8880: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8890: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
88a0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
88b0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
88c0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
88d0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
88e0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
88f0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8900: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8910: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8920: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8930: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8940: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8950: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8960: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8970: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8980: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8990: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
89a0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
89b0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
89c0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
89d0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
89e0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
89f0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
8a00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
8a10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
8a20: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8a30: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8a40: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8a50: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8a60: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8a70: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8a80: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8a90: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8aa0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8ab0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8ac0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8ad0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8ae0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8af0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8b00: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8b10: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8b20: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8b30: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8b40: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
8b50: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8b60: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
8b70: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8b80: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8b90: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8ba0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8bb0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8bc0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
8bd0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8be0: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8bf0: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
8c00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8c10: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
8c20: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
8c30: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
8c40: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
8c50: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
8c60: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
8c70: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
8c80: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8c90: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
8ca0: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
8cb0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
8cc0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
8cd0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
8ce0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8cf0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8d00: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8d10: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8d20: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8d30: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8d40: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8d50: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8d60: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8d70: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8d80: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8d90: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
8da0: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
8db0: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
8dc0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
8dd0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
8de0: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
8df0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8e00: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8e10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8e20: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8e30: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8e40: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8e50: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8e60: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8e70: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8e80: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8e90: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ea0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8eb0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ec0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ed0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8ee0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8ef0: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8f00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
8f10: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8f20: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8f30: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
8f40: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8f50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8f60: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8f70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8f80: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8f90: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
8fa0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8fb0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
8fc0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
8fd0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
8fe0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8ff0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
9000: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9010: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
9020: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
9030: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9040: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
9050: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
9060: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
9070: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9080: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
9090: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
90a0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
90b0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
90c0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
90d0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
90e0: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
90f0: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
9100: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
9110: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
9120: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
9130: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
9140: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
9150: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
9160: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
9170: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
9180: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
9190: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
91a0: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
91b0: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
91c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
91d0: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
91e0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
91f0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9200: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9210: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
9220: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
9230: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
9240: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9250: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9260: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9270: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
9280: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
9290: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
92a0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b  ;.  pOut->n = 0;
92b0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
92c0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
92d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
92e0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
92f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9300: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
9310: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
9320: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70   nullFlag;.    p
9330: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20  Out->n = 0;.    
9340: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
9350: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9360: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
9370: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9380: 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  s: r[P1]=NULL.**
9390: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
93a0: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
93b0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
93c0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
93d0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
93e0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
93f0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
9400: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
9410: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
9420: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
9430: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
9440: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
9450: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
9460: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
9470: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
9480: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
9490: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
94a0: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
94b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
94c0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
94d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
94e0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
94f0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9500: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
9510: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9520: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
9530: 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f  ut->flags&~(MEM_
9540: 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66  Undefined|MEM_Af
9550: 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c  fMask))|MEM_Null
9560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9570: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
9580: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9590: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
95a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
95b0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
95c0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
95d0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
95e0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
95f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9600: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9610: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
9620: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
9630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
9640: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
9650: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
9660: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9670: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
9680: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
9690: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
96a0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
96b0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
96c0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
96d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
96e0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
96f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
9700: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9710: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9720: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
9730: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
9740: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
9750: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
9760: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9770: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
9780: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
9790: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
97a0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
97b0: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
97c0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
97d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
97e0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
97f0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
9800: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9810: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
9820: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
9830: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
9840: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
9850: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9860: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
9870: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
9880: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
9890: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c  | pOp->p4.z==sql
98a0: 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
98b0: 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70  me(p->pVList,pOp
98c0: 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20  ->p1) );.  pVar 
98d0: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
98e0: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
98f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
9900: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
9910: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9920: 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
9930: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
9940: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9950: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
9960: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
9970: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9980: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
9990: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
99a0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
99b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
99c0: 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  is: r[P2@P3]=r[P
99d0: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
99e0: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
99f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9a00: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9a10: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
9a20: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
9a30: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
9a40: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
9a50: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
9a60: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
9a70: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9a80: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9a90: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9aa0: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9ab0: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9ac0: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9ad0: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9ae0: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9af0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9b10: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
9b20: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
9b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9b40: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
9b50: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
9b60: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9b70: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9b80: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9b90: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9ba0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9bb0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9bc0: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9bd0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9be0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9bf0: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9c00: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9c10: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
9c20: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
9c30: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
9c40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9c50: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9c60: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9c70: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
9c80: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9c90: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9ca0: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9cb0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9cc0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9cd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9ce0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
9cf0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9d00: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
9d10: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
9d20: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
9d30: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
9d40: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
9d50: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
9d60: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
9d70: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
9d80: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9d90: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
9da0: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
9db0: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
9dc0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
9dd0: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
9de0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9df0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
9e00: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9e10: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
9e20: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
9e30: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
9e40: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9e50: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
9e60: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
9e70: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9e80: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
9e90: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9ea0: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
9eb0: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
9ec0: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9ed0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
9ee0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
9ef0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
9f00: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
9f10: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
9f20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9f30: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9f40: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9f50: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9f60: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
9f70: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9f80: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9f90: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9fa0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
9fb0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
9fc0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
9fd0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
9fe0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
9ff0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a000: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a010: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a020: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a030: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a040: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a050: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a060: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a070: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a080: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a090: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a0a0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a0b0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a0c0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a0d0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a0e0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a0f0: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a100: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a110: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a120: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a130: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a140: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a150: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a160: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a170: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a180: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a190: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a1a0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a1b0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a1c0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a1d0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a1e0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a1f0: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a200: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a210: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a220: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a230: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a240: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a250: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a260: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a270: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a280: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a290: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a2a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a2b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a2c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a2d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a2e0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a2f0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a300: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a310: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a320: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a330: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
a340: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
a350: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a360: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
a370: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a380: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
a390: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a3a0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a3b0: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
a3c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a3d0: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
a3e0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a3f0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a400: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
a410: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
a420: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
a430: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
a440: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
a450: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
a460: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a470: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a480: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a490: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
a4a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a4b0: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
a4c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a4d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a4e0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
a4f0: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
a500: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a510: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
a520: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a530: 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b  opsis: output=r[
a540: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
a550: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
a560: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
a570: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
a580: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
a590: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
a5a0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
a5b0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
a5c0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
a5d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
a5e0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
a5f0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
a600: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
a610: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
a620: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
a630: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
a640: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
a650: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
a660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
a670: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
a680: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
a690: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
a6a0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
a6b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a6c0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
a6d0: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
a6e0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
a6f0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
a700: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
a710: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a720: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
a730: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
a740: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
a750: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
a760: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
a770: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
a780: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
a790: 65 73 73 4c 69 6d 69 74 20 0a 20 20 20 26 26 20  essLimit .   && 
a7a0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
a7b0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
a7c0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
a7d0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
a7e0: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  T;.    goto abor
a7f0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
a800: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
a810: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
a820: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
a830: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
a840: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a850: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
a860: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a870: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
a880: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
a890: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
a8a0: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
a8b0: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
a8c0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
a8d0: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
a8e0: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
a8f0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
a900: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
a910: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
a920: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a930: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
a940: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
a950: 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  al );.    goto a
a960: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a970: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  r;.  }..  /* If 
a980: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
a990: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
a9a0: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
a9b0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
a9c0: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
a9d0: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
a9e0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
a9f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
aa00: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
aa10: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aa20: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
aa30: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
aa40: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
aa50: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
aa60: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
aa70: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
aa80: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
aa90: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
aaa0: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
aab0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
aac0: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
aad0: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
aae0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
aaf0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
ab00: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
ab10: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
ab20: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
ab30: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
ab40: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
ab50: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
ab60: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
ab70: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ab80: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
ab90: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
aba0: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
abb0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
abc0: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
abd0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
abe0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
abf0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
ac00: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
ac10: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
ac20: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
ac30: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
ac40: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
ac50: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
ac60: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
ac70: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
ac80: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
ac90: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
aca0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
acb0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
acc0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
acd0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
ace0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
acf0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
ad00: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
ad10: 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  SE);.  assert( r
ad20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
ad30: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
ad40: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
ad50: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
ad60: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
ad70: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
ad80: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
ad90: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
ada0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
adb0: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
adc0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
add0: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
ade0: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
adf0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
ae00: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
ae10: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
ae20: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
ae30: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
ae40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ae50: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
ae60: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
ae70: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ae80: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
ae90: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
aea0: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
aeb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
aec0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
aed0: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
aee0: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
aef0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
af00: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
af10: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
af20: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
af30: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
af40: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
af50: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
af60: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
af70: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
af80: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
af90: 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54  m;..  if( db->mT
afa0: 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52  race & SQLITE_TR
afb0: 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64  ACE_ROW ){.    d
afc0: 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45  b->xTrace(SQLITE
afd0: 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e  _TRACE_ROW, db->
afe0: 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29  pTraceArg, p, 0)
aff0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75  ;.  }..  /* Retu
b000: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
b010: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e  */.  p->pc = (in
b020: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20  t)(pOp - aOp) + 
b030: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
b040: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
b050: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
b060: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
b070: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b080: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b090: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
b0a0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
b0b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
b0c0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
b0d0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
b0e0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
b0f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b100: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b110: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
b120: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
b130: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
b140: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
b150: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
b160: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
b170: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
b180: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
b190: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
b1a0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
b1b0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
b1c0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
b1d0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b1e0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
b1f0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
b200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
b210: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
b220: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
b230: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
b240: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
b250: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
b260: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b270: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b280: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
b290: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b2a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
b2b0: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
b2c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
b2d0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
b2e0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
b2f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
b300: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
b310: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
b320: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
b330: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
b340: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
b350: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b360: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
b370: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
b380: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
b390: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
b3a0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
b3b0: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
b3c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
b3d0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
b3e0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
b3f0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b400: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
b410: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
b420: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
b430: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
b440: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b450: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
b460: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
b470: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
b480: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
b490: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
b4a0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
b4b0: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
b4c0: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
b4d0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30  pOut->z[nByte]=0
b4e0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
b4f0: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
b500: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
b510: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
b520: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
b530: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
b540: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
b550: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
b560: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b570: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
b580: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b590: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b5a0: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
b5b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
b5c0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
b5d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b5e0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b5f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b600: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b610: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b620: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b630: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b640: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
b650: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
b660: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b670: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b680: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b690: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b6a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b6b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b6c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b6d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b6e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b6f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b700: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b710: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b720: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b730: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b740: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b750: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  s: r[P3]=r[P2]-r
b760: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
b770: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
b780: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
b790: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
b7a0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b7b0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b7c0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b7d0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b7e0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b7f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b800: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b810: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
b820: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b830: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b  : r[P3]=r[P2]/r[
b840: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
b850: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b860: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b870: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b880: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b890: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b8a0: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
b8b0: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
b8c0: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
b8d0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
b8e0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
b8f0: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
b900: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
b910: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
b920: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b930: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
b940: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
b950: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b960: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
b970: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
b980: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
b990: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
b9a0: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
b9b0: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
b9c0: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
b9d0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b9e0: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba00: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
ba10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ba20: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
ba30: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ba40: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ba50: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ba60: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
ba70: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ba80: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
ba90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
baa0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bac0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
bad0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
bae0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
baf0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
bb00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bb10: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
bb20: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
bb30: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
bb50: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
bb60: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bb70: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
bb80: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
bb90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
bba0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
bbb0: 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69   */.  char bInti
bbc0: 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64  nt;   /* Started
bbd0: 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65   out as two inte
bbe0: 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  ger operands */.
bbf0: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
bc00: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
bc10: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
bc20: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
bc30: 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20  u16 type1;      
bc40: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
bc50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
bc60: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20  */.  u16 type2; 
bc70: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
bc80: 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70  type of right op
bc90: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
bca0: 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  A;         /* In
bcb0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c  teger value of l
bcc0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bcd0: 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20   i64 iB;        
bce0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bcf0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bd00: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
bd10: 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  A;      /* Real 
bd20: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
bd30: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bd40: 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rB;      /* Re
bd50: 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  al value of righ
bd60: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20  t operand */..  
bd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
bd80: 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d  ->p1];.  type1 =
bd90: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
bda0: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
bdb0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74  em[pOp->p2];.  t
bdc0: 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype2 = numericTy
bdd0: 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74  pe(pIn2);.  pOut
bde0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
bdf0: 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ];.  flags = pIn
be00: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
be10: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74  >flags;.  if( (t
be20: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
be30: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
be40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
be50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
be60: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
be70: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
be80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
be90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bea0: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
beb0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
bec0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bed0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bee0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bef0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
bf00: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bf10: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bf20: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bf30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bf40: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bf50: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bf60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bf70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bf80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bf90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bfa0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bfb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bfc0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bfd0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bfe0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bff0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
c000: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
c010: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c020: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
c030: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
c040: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c050: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c060: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c070: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c080: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c090: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
c0a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
c0c0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
c0d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c0e0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
c0f0: 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67   }else if( (flag
c100: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
c110: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69   ){.    goto ari
c120: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c130: 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  s_null;.  }else{
c140: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
c150: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
c160: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
c170: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
c180: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
c190: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
c1a0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
c1b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
c1c0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
c1d0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
c1e0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c1f0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c200: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
c210: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
c220: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c230: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
c240: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
c250: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c260: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
c270: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
c280: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
c290: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2a0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
c2b0: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
c2c0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
c2d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c2f0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
c300: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c310: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
c320: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
c330: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
c340: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
c350: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c360: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c370: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c380: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c390: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c3a0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
c3b0: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
c3c0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c3d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
c3e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
c3f0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c400: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c410: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c420: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c430: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
c440: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
c450: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
c460: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c470: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c480: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c490: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
c4a0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c4b0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
c4c0: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
c4d0: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
c4e0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
c4f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c500: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
c510: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
c520: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
c530: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
c540: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
c550: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c560: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c570: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c580: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
c590: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
c5a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c5b0: 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74  a CollSeq object
c5c0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
c5d0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
c5e0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
c5f0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
c600: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
c610: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
c620: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
c630: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
c640: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
c650: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
c660: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
c670: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
c680: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
c690: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
c6a0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
c6b0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
c6c0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
c6d0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
c6e0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
c6f0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
c700: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
c710: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
c720: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
c730: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
c740: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
c750: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
c760: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
c770: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
c780: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c790: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
c7a0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
c7b0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
c7c0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
c7d0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
c7e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
c7f0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
c800: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
c810: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
c820: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
c830: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
c840: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
c850: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
c860: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
c870: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
c880: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
c890: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
c8a0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c8b0: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c8c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c8d0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
c8e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c8f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
c900: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c910: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
c920: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
c930: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
c940: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
c950: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c960: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c970: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c980: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c990: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c9a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
c9b0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
c9c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c9d0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c9e0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c9f0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
ca00: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ca10: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
ca20: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
ca30: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ca40: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ca50: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
ca60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ca70: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ca80: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
ca90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
caa0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
cab0: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
cac0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
cad0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
cae0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
caf0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
cb00: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
cb10: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
cb20: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
cb30: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
cb40: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
cb50: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
cb60: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
cb70: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cb80: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
cb90: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
cba0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
cbb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
cbc0: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
cbd0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
cbe0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
cbf0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
cc00: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
cc10: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
cc20: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
cc30: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
cc40: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
cc50: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cc60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
cc70: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
cc80: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
cc90: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cca0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
ccb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ccc0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ccd0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
cce0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ccf0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd10: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
cd20: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd30: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
cd40: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
cd50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cd60: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cd70: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd80: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
cd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cda0: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
cdb0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cdc0: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
cdd0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
cde0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
cdf0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ce00: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
ce10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
ce20: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ce30: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
ce40: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ce50: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
ce60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ce70: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ce80: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
ce90: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
cea0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ceb0: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
cec0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ced0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
cee0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
cef0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
cf00: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
cf10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
cf20: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
cf30: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
cf40: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
cf50: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
cf60: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
cf70: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
cf80: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
cf90: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
cfa0: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
cfb0: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
cfc0: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
cfd0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
cfe0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
cff0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
d000: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
d010: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
d020: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
d030: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
d040: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
d050: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
d060: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
d070: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
d080: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d090: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
d0a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
d0b0: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
d0c0: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
d0d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
d0e0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
d0f0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
d100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d110: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
d120: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
d130: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
d140: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
d150: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
d160: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
d170: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
d180: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
d190: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
d1a0: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
d1b0: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
d1c0: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
d1d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
d1e0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
d1f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d200: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
d210: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d220: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
d230: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
d240: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
d250: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
d260: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
d270: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
d280: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d290: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
d2a0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
d2b0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
d2c0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
d2d0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
d2e0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
d2f0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
d300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
d310: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d320: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d330: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d340: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
d350: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
d360: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
d370: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
d380: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
d390: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
d3a0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
d3b0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
d3c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d3d0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d3e0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
d3f0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
d400: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
d410: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
d420: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
d430: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
d440: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
d450: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
d460: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
d470: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
d480: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
d490: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
d4a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
d4b0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
d4c0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
d4d0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d4e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d4f0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d500: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
d510: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
d520: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d530: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
d540: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
d550: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
d560: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
d570: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
d580: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d590: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
d5a0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
d5b0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
d5c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
d5d0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
d5e0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d5f0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
d600: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
d610: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
d620: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d630: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d640: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
d650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
d660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d670: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
d680: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
d690: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
d6a0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
d6b0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
d6c0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
d6d0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
d6e0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
d6f0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
d700: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
d710: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
d720: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
d730: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
d740: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
d750: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
d760: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
d770: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
d780: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
d790: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
d7a0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
d7b0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
d7c0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
d7d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
d7e0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d800: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d810: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d820: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d830: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
d840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d850: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d860: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d870: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
d880: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
d890: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
d8a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d8b0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
d8c0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
d8d0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d8f0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
d900: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
d910: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
d920: 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72 3b 20   P2=='A' &rarr; 
d930: 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  BLOB.** <li> P2=
d940: 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45 58 54  ='B' &rarr; TEXT
d950: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43 27  .** <li> P2=='C'
d960: 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49 43 0a   &rarr; NUMERIC.
d970: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27 20  ** <li> P2=='D' 
d980: 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52 0a 2a  &rarr; INTEGER.*
d990: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20 26  * <li> P2=='E' &
d9a0: 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f  rarr; REAL.** </
d9b0: 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ul>.**.** A NULL
d9c0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d9d0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d9e0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d9f0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
da00: 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20   OP_Cast: {     
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
da20: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
da30: 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45   pOp->p2>=SQLITE
da40: 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70  _AFF_BLOB && pOp
da50: 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2<=SQLITE_AFF
da60: 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63  _REAL );.  testc
da70: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
da80: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b  LITE_AFF_TEXT );
da90: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
daa0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
dab0: 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63  _BLOB );.  testc
dac0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
dad0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
dae0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
daf0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
db00: 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20  AFF_INTEGER );. 
db10: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
db20: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2==SQLITE_AFF_R
db30: 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  EAL );.  pIn1 = 
db40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
db50: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
db60: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72  ge(p, pIn1);.  r
db70: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
db80: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
db90: 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c  dbeMemCast(pIn1,
dba0: 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69   pOp->p2, encodi
dbb0: 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
dbc0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
dbd0: 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
dbe0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
dbf0: 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
dc00: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
dc10: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
dc20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
dc30: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
dc40: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
dc50: 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]==r[P1].**.** 
dc60: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
dc70: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
dc80: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
dc90: 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74  g(P3)==reg(P1) t
dca0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
dcb0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
dcc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
dcd0: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
dce0: 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   in P5, then.** 
dcf0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
dd00: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
dd10: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
dd20: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
dd30: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
dd40: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
dd50: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
dd60: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
dd70: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
dd80: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
dd90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
dda0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ddb0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ddc0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ddd0: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
dde0: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ddf0: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
de00: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
de10: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
de20: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
de30: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
de40: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
de50: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
de60: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
de70: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
de80: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
de90: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dea0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
deb0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
dec0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
ded0: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
dee0: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
def0: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
df00: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
df10: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
df20: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
df30: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
df40: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
df50: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
df60: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
df70: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
df80: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
df90: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
dfa0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
dfb0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
dfc0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
dfd0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
dfe0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
dff0: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
e000: 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74 6f  ** P4 is used to
e010: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
e020: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
e030: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
e040: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
e050: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
e060: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
e070: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
e080: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
e090: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
e0a0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
e0b0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
e0c0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
e0d0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
e0e0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
e0f0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e100: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
e110: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
e120: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
e130: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20  an blobs..**.** 
e140: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e150: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e160: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e170: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e180: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e190: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e1a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e1b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e1c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e1d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e1e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e1f0: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
e200: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e210: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e220: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
e230: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e240: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e250: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e260: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e270: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e280: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e290: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e2a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
e2b0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
e2c0: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
e2d0: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
e2e0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
e2f0: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
e300: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
e310: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
e320: 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c  s NULL or 0 (fal
e330: 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  se)..** In other
e340: 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20   words, a prior 
e350: 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c  r[P2] value will
e360: 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74   not be overwrit
e370: 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e  ten by 1 (true).
e380: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
e390: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e3a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
e3b0: 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]!=r[P1].**
e3c0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e3d0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20  ust like the Eq 
e3e0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e3f0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e400: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e410: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e420: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e430: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
e440: 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ee the Eq opcode
e450: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
e460: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e470: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
e480: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
e490: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
e4a0: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
e4b0: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
e4c0: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
e4d0: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
e4e0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
e4f0: 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29  NULL or 1 (true)
e500: 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
e510: 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50  rds, a prior r[P
e520: 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f  2] value will no
e530: 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  t be overwritten
e540: 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a   by 0 (false)..*
e550: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20  /./* Opcode: Lt 
e560: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e570: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
e580: 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]<r[P1].**.**
e590: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e5a0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e5b0: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e5c0: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e5d0: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e5e0: 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69  ddress P2.  Or i
e5f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e600: 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74  REP2 flag is set
e610: 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20   in P5 store.** 
e620: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e630: 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31  mparison (0 or 1
e640: 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72   or NULL) into r
e650: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
e660: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e670: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
e680: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
e690: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
e6a0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
e6b0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61  NULL then the ta
e6c0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
e6d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
e6e0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
e6f0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
e700: 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74  l through if eit
e710: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e720: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
e730: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
e740: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
e750: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
e760: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
e770: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
e780: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
e790: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
e7a0: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
e7b0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
e7c0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
e7d0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
e7e0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
e7f0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
e800: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
e810: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
e820: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
e830: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
e840: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
e850: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
e860: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
e870: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
e880: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
e890: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
e8a0: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
e8b0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
e8c0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
e8d0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
e8e0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
e8f0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
e900: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
e910: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
e920: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
e930: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
e940: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
e950: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
e960: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
e970: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
e980: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
e990: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
e9a0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
e9b0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
e9c0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
e9d0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
e9e0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
e9f0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
ea00: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
ea10: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
ea20: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
ea30: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
ea40: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
ea50: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ea60: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ea70: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ea80: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ea90: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
eaa0: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
eab0: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
eac0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
ead0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
eae0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
eaf0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb00: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
eb10: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
eb20: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eb30: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
eb40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
eb50: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
eb60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
eb70: 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]<=r[P1].**
eb80: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
eb90: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
eba0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ebb0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
ebc0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
ebd0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ebe0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
ebf0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
ec00: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ec10: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ec20: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ec30: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ec40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ec50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ec60: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ec70: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
ec80: 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  3]>r[P1].**.** T
ec90: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
eca0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
ecb0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
ecc0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
ecd0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
ece0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
ecf0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
ed00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
ed10: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
ed20: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
ed30: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
ed40: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ed50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
ed60: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ed70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
ed80: 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]>=r[P1].**.*
ed90: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eda0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
edb0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
edc0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
edd0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
ede0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
edf0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ee00: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ee10: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ee20: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ee30: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ee40: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ee50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ee60: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
ee70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ee80: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ee90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
eea0: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
eeb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
eec0: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
eed0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
eee0: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
eef0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ef00: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ef10: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ef20: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ef30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ef40: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ef50: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ef60: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ef70: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ef80: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ef90: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
efa0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
efb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
efc0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
efd0: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20  3 */.  int res, 
efe0: 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65  res2;      /* Re
eff0: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
f000: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
f010: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
f020: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
f030: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
f040: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
f050: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
f060: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
f070: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f080: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
f090: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
f0a0: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
f0b0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
f0c0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
f0d0: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
f0e0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f0f0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
f100: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
f110: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
f120: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
f130: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
f140: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
f150: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
f160: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
f170: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f180: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
f190: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f1a0: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
f1b0: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
f1c0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
f1d0: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
f1e0: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
f1f0: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
f200: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
f210: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
f220: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
f230: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f240: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
f250: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f260: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f270: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f280: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f290: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f2a0: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f2b0: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f2c0: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f2d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
f2e0: 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
f2f0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f300: 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  LL)==0 );.      
f310: 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61 67  if( (flags1&flag
f320: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f330: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f340: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f350: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f360: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f370: 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71 75  Operands are equ
f380: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73  al */.      }els
f390: 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  e{.        res =
f3a0: 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73   1;  /* Operands
f3b0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f3c0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f3d0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f3e0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f3f0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f400: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f410: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f420: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f430: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f440: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f450: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f460: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f470: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f480: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f490: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f4a0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f4b0: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f4c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f4d0: 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d        iCompare =
f4e0: 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e   1;    /* Operan
f4f0: 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
f500: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   */.        memA
f510: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
f520: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d  pOut);.        M
f530: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f540: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f550: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f560: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f570: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f580: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f590: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f5a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f5b0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f5c0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f5d0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
f5e0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
f5f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
f600: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f610: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f620: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f630: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f640: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f650: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f660: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f670: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f680: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f690: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
f6a0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
f6b0: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20  flags3)&MEM_Str 
f6c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
f6d0: 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
f6e0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f6f0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f700: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79  .          apply
f710: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
f720: 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20  pIn1,0);.       
f730: 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c 61     testcase( fla
f740: 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
f750: 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20   ); /* Possible 
f760: 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f  if pIn1==pIn3 */
f770: 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73  .          flags
f780: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
f790: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f7a0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
f7b0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
f7c0: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
f7d0: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
f7e0: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
f7f0: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
f800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f810: 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64   }.      /* Hand
f820: 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
f830: 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f  se of integer co
f840: 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61  mparison here, a
f850: 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70  s an.      ** op
f860: 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61  timization, to a
f870: 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73  void a call to s
f880: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f890: 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  () */.      if( 
f8a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
f8b0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f8c0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
f8d0: 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
f8e0: 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i > pIn1->u.i ){
f8f0: 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20   res = +1; goto 
f900: 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
f910: 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
f920: 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i < pIn1->u.i 
f930: 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74  ){ res = -1; got
f940: 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
f950: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
f960: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f  .        goto co
f970: 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20  mpare_op;.      
f980: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
f990: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
f9a0: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
f9b0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
f9c0: 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
f9d0: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
f9e0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
f9f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
fa00: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
fa10: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
fa20: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa30: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
fa40: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
fa50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
fa60: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c  mStringify(pIn1,
fa70: 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
fa80: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
fa90: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e   (flags1&MEM_Dyn
faa0: 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ) != (pIn1->flag
fab0: 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
fac0: 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28        flags1 = (
fad0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn1->flags & ~M
fae0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
faf0: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70  flags1 & MEM_Typ
fb00: 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20  eMask);.        
fb10: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49  assert( pIn1!=pI
fb20: 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  n3 );.      }.  
fb30: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
fb40: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
fb50: 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
fb60: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
fb70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
fb80: 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
fb90: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
fba0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fbb0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
fbc0: 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
fbd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
fbe0: 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
fbf0: 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
fc00: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
fc10: 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
fc20: 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
fc30: 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
fc40: 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
fc50: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
fc60: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
fc70: 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
fc80: 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
fc90: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
fca0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
fcb0: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
fcc0: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
fcd0: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
fce0: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
fcf0: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
fd00: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f  4.pColl);.  }.co
fd10: 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41  mpare_op:.  /* A
fd20: 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65  t this point, re
fd30: 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  s is negative, z
fd40: 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
fd50: 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20   if reg[P1] is. 
fd60: 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65   ** less than, e
fd70: 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
fd80: 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d  ter than reg[P3]
fd90: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
fda0: 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68   Compute.  ** th
fdb0: 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73  e answer to this
fdc0: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73   operator in res
fdd0: 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  2, depending on 
fde0: 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69  what the compari
fdf0: 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f  son.  ** operato
fe00: 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20  r actually is.  
fe10: 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
fe20: 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f  f code depends o
fe30: 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20  n the fact.  ** 
fe40: 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61  that the 6 compa
fe50: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
fe60: 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20  are consecutive 
fe70: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73  integers in this
fe80: 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45  .  ** order:  NE
fe90: 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54  , EQ, GT, LE, LT
fea0: 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74  , GE */.  assert
feb0: 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31  ( OP_Eq==OP_Ne+1
fec0: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
fed0: 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73  t==OP_Ne+2 ); as
fee0: 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f  sert( OP_Le==OP_
fef0: 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  Ne+3 );.  assert
ff00: 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34  ( OP_Lt==OP_Ne+4
ff10: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
ff20: 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20  e==OP_Ne+5 );.  
ff30: 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20  if( res<0 ){    
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff50: 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67      /* ne, eq, g
ff60: 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f  t, le, lt, ge */
ff70: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
ff80: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
ff90: 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aLTb[] = { 1,  0
ffa0: 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30  ,  0,  1,  1,  0
ffb0: 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
ffc0: 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  LTb[pOp->opcode 
ffd0: 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
ffe0: 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a  e if( res==0 ){.
fff0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10000 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10010 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c  EQb[] = { 0,  1,
10020 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20    0,  1,  0,  1 
10030 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45  };.    res2 = aE
10040 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Qb[pOp->opcode -
10050 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
10060 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10070 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10080 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aGTb[] = { 1,  
10090 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  0,  1,  0,  0,  
100a0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
100b0 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aGTb[pOp->opcode
100c0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a   - OP_Ne];.  }..
100d0 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
100e0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
100f0 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
10100 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
10110 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
10120 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
10130 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
10140 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
10150 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
10160 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
10170 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
10180 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
10190 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
101a0 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
101b0 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
101c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
101d0 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
101e0 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
101f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
10200 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b   iCompare = res;
10210 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
10220 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  5 & SQLITE_KEEPN
10230 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ULL)!=0 ){.     
10240 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c   /* The KEEPNULL
10250 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f   flag prevents O
10260 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72  P_Eq from overwr
10270 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74  iting a NULL wit
10280 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  h 1.      ** and
10290 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20   prevents OP_Ne 
102a0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
102b0 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54   NULL with 0.  T
102c0 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a  his flag.      *
102d0 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  * is only used i
102e0 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65  n contexts where
102f0 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a   either:.      *
10300 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45  *   (1) op==OP_E
10310 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  q && (r[P2]==NUL
10320 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20  L || r[P2]==0). 
10330 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70       **   (2) op
10340 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32  ==OP_Ne && (r[P2
10350 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
10360 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68  ==1).      ** Th
10370 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f  erefore it is no
10380 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
10390 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74  heck the content
103a0 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20   of r[P2] for.  
103b0 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a      ** NULL. */.
103c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
103d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
103e0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
103f0 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10400 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20  assert( res2==0 
10410 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20  || res2==1 );.  
10420 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10430 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==0 && pOp->op
10440 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10450 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10460 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f  es2==1 && pOp->o
10470 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10480 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10490 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
104a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
104b0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
104c0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
104d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
104e0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
104f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29  ->opcode==OP_Eq)
10500 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a  ==res2 ) break;.
10510 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
10520 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
10530 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
10540 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10550 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
10560 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20  ->u.i = res2;.  
10570 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10580 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
105a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
105b0 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
105c0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
105d0 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
105e0 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  s2 ){.      goto
105f0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
10600 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
10610 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c  }../* Opcode: El
10620 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a  seNotEq * P2 * *
10630 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
10640 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69  code must immedi
10650 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20  ately follow an 
10660 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63  OP_Lt or OP_Gt c
10670 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
10680 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74  or..** If result
10690 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d   of an OP_Eq com
106a0 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73  parison on the s
106b0 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73  ame two operands
106c0 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
106d0 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20  e NULL or false 
106e0 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a  (0), then then j
106f0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
10700 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
10710 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
10720 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70  son on the two p
10730 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73  revious operands
10740 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
10750 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68  een true (1), th
10760 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
10770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65  .*/.case OP_Else
10780 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f  NotEq: {       /
10790 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43  * same as TK_ESC
107a0 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61  APE, jump */.  a
107b0 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
107c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
107d0 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c  -1].opcode==OP_L
107e0 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  t || pOp[-1].opc
107f0 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20  ode==OP_Gt );.  
10800 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10810 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10820 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61  EP2 );.  VdbeBra
10830 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72  nchTaken(iCompar
10840 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  e!=0, 2);.  if( 
10850 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f  iCompare!=0 ) go
10860 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10870 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
10880 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
10890 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
108a0 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
108b0 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
108c0 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
108d0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e  perator in the n
108e0 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
108f0 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
10900 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
10910 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  n the P4 operand
10920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
10930 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
10940 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
10950 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
10960 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
10970 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10980 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
10990 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
109a0 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
109b0 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
109c0 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
109d0 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
109e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
109f0 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
10a00 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79  P4 integer array
10a10 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f   is the length o
10a20 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61  f the array.** a
10a30 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f  nd does not beco
10a40 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  me part of the p
10a50 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  ermutation..*/.c
10a60 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
10a70 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
10a80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
10a90 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
10aa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
10ab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10ac0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
10ad0 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73  Compare );.  ass
10ae0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26  ert( pOp[1].p5 &
10af0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10b00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
10b10 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
10b20 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
10b30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10b40 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
10b50 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
10b60 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
10b70 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
10b80 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
10b90 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
10ba0 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
10bb0 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
10bc0 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
10bd0 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
10be0 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
10bf0 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
10c00 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
10c10 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10c20 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10c30 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10c40 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10c50 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10c60 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10c70 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10c80 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10c90 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10ca0 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10cb0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
10cc0 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
10cd0 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
10ce0 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
10cf0 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
10d00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
10d10 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10d20 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10d30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10d40 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10d50 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10d60 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10d70 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10d80 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10d90 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10da0 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10db0 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
10dc0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
10dd0 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
10de0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
10df0 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
10e00 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
10e10 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10e20 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10e30 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10e40 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10e50 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10e60 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10e70 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10e80 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10e90 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10ea0 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10eb0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
10ec0 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
10ed0 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
10ee0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
10ef0 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
10f00 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
10f10 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
10f20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
10f30 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
10f40 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  der */.  int *aP
10f50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54  ermute;     /* T
10f60 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
10f70 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
10f80 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10f90 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50  TE)==0 ){.    aP
10fa0 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65  ermute = 0;.  }e
10fb0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
10fc0 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
10fd0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10fe0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75  opcode==OP_Permu
10ff0 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73  tation );.    as
11000 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
11010 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
11020 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74  Y );.    aPermut
11030 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61  e = pOp[-1].p4.a
11040 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72  i + 1;.    asser
11050 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29  t( aPermute!=0 )
11060 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d  ;.  }.  n = pOp-
11070 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
11080 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
11090 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
110a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
110b0 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
110c0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
110d0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69  p2 = pOp->p2;.#i
110e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
110f0 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
11100 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
11110 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
11120 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
11130 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
11140 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
11150 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
11160 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
11170 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11180 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11190 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
111a0 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
111b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
111c0 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
111d0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
111e0 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
111f0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11200 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11210 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
11220 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11230 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
11240 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
11250 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
11260 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
11270 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
11280 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
11290 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
112a0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
112b0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
112c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
112d0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
112e0 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
112f0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
11300 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
11310 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
11320 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
11330 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
11340 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
11350 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69  pKeyInfo->nKeyFi
11360 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11370 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11380 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11390 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
113a0 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
113b0 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
113c0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
113d0 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
113e0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
113f0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
11400 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
11410 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
11420 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
11430 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
11440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11450 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
11460 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11470 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
11480 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
11490 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
114a0 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
114b0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
114c0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
114d0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
114e0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
114f0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
11500 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
11510 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
11520 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
11530 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
11540 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
11550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11560 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
11570 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
11580 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
11590 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
115a0 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
115b0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
115c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
115d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
115e0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
115f0 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
11600 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
11610 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
11620 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
11630 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
11640 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11650 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
11660 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11670 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
11680 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
11690 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
116a0 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
116b0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
116c0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
116d0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
116e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
116f0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
11700 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
11710 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
11720 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
11730 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
11740 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11750 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
11760 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
11770 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
11780 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
11790 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
117a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
117b0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
117c0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
117d0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
117e0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
117f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
11800 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
11810 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
11820 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11830 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11840 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
11850 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
11860 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
11870 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
11880 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11890 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
118a0 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
118b0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
118c0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
118d0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
118e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
118f0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
11900 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
11910 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
11920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11930 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
11940 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
11950 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
11960 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
11970 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
11980 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
11990 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
119a0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
119b0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
119c0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
119d0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
119e0 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
119f0 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61  eBooleanValue(&a
11a00 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29  Mem[pOp->p1], 2)
11a10 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33  ;.  v2 = sqlite3
11a20 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
11a30 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c  (&aMem[pOp->p2],
11a40 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   2);.  if( pOp->
11a50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
11a60 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11a70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
11a80 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
11a90 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
11aa0 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
11ab0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
11ac0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
11ad0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
11ae0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11af0 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
11b00 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
11b10 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
11b20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
11b30 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
11b40 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11b50 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
11b60 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
11b70 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11b80 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
11b90 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
11ba0 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
11bb0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11bc0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
11bd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11be0 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
11bf0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11c00 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
11c10 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11c20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11c30 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
11c40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
11c50 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
11c60 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
11c70 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
11c80 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
11c90 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
11ca0 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
11cb0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
11cc0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11cd0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
11ce0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11cf0 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
11d00 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11d10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11d20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11d30 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28  Op->p2];.  if( (
11d40 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11d50 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11d60 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11d70 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21  SetInt64(pOut, !
11d80 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
11d90 61 6e 56 61 6c 75 65 28 70 49 6e 31 2c 30 29 29  anValue(pIn1,0))
11da0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
11db0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
11dc0 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a  Null(pOut);.  }.
11dd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11de0 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
11df0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11e00 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72  opsis: r[P1]= ~r
11e10 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
11e20 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  pret the content
11e30 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
11e40 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  as an integer.  
11e50 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65  Store the.** one
11e60 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20  s-complement of 
11e70 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74  the P1 value int
11e80 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  o register P2.  
11e90 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61  If P1 holds.** a
11ea0 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
11eb0 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a   a NULL in P2..*
11ec0 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74  /.case OP_BitNot
11ed0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11ee0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
11ef0 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  TNOT, in1, out2 
11f00 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11f10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
11f20 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11f30 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
11f40 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
11f50 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
11f60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11f70 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
11f80 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11f90 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11fa0 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65  i = ~sqlite3Vdbe
11fb0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11fc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
11fe0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
11ff0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
12000 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
12010 75 63 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74  uction the first
12020 20 74 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64   time this opcod
12030 65 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65  e is.** encounte
12040 72 65 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f  red on each invo
12050 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79  cation of the by
12060 74 65 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e  te-code program.
12070 20 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20    Jump to P2.** 
12080 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e  on the second an
12090 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  d all subsequent
120a0 20 65 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69   encounters duri
120b0 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f  ng the same invo
120c0 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f  cation..**.** To
120d0 70 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73  p-level programs
120e0 20 64 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74   determine first
120f0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63   invocation by c
12100 6f 6d 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a  omparing the P1.
12110 2a 2a 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e  ** operand again
12120 73 74 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e  st the P1 operan
12130 64 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74  d on the OP_Init
12140 20 6f 70 63 6f 64 65 20 61 74 20 74 68 65 20 62   opcode at the b
12150 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74  eginning.** of t
12160 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20  he program.  If 
12170 74 68 65 20 50 31 20 76 61 6c 75 65 73 20 64 69  the P1 values di
12180 66 66 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ffer, then fall 
12190 74 68 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65  through and make
121a0 0a 2a 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68  .** the P1 of th
121b0 69 73 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20  is opcode equal 
121c0 74 6f 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f  to the P1 of OP_
121d0 49 6e 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c  Init.  If P1 val
121e0 75 65 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73  ues are.** the s
121f0 61 6d 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ame then take th
12200 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e jump..**.** Fo
12210 72 20 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74  r subprograms, t
12220 68 65 72 65 20 69 73 20 61 20 62 69 74 6d 61 73  here is a bitmas
12230 6b 20 69 6e 20 74 68 65 20 56 64 62 65 46 72 61  k in the VdbeFra
12240 6d 65 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  me that determin
12250 65 73 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  es.** whether or
12260 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68   not the jump sh
12270 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20  ould be taken.  
12280 54 68 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e  The bitmask is n
12290 65 63 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61  ecessary.** beca
122a0 75 73 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74  use the self-alt
122b0 65 72 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b  ering code trick
122c0 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66   does not work f
122d0 6f 72 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20  or recursive.** 
122e0 74 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73  triggers..*/.cas
122f0 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
12300 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
12310 20 2a 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b   */.  u32 iAddr;
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 74 68  /* Address of th
12340 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  is instruction *
12350 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  /.  assert( p->a
12360 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[0].opcode==OP
12370 5f 49 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70  _Init );.  if( p
12380 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
12390 69 41 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f  iAddr = (int)(pO
123a0 70 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20  p - p->aOp);.   
123b0 20 69 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d   if( (p->pFrame-
123c0 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20  >aOnce[iAddr/8] 
123d0 26 20 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37  & (1<<(iAddr & 7
123e0 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  )))!=0 ){.      
123f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12400 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74  1, 2);.      got
12410 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12420 20 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d    }.    p->pFram
12430 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38  e->aOnce[iAddr/8
12440 5d 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26  ] |= 1<<(iAddr &
12450 20 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   7);.  }else{.  
12460 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e    if( p->aOp[0].
12470 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  p1==pOp->p1 ){. 
12480 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
12490 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20  aken(1, 2);.    
124a0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
124b0 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56  2;.    }.  }.  V
124c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
124d0 2c 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  , 2);.  pOp->p1 
124e0 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a  = p->aOp[0].p1;.
124f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12500 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
12510 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
12520 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
12530 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
12540 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
12550 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12560 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
12570 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
12580 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
12590 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
125a0 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
125b0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
125c0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
125d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
125e0 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20  .case OP_If:  { 
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12600 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12610 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c  int c;.  c = sql
12620 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
12630 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alue(&aMem[pOp->
12640 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  p1], pOp->p3);. 
12650 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12660 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
12670 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74   c ) goto jump_t
12680 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
12690 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
126a0 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
126b0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
126c0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
126d0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
126e0 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
126f0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
12700 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68  ed false if it h
12710 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
12720 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
12730 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12740 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
12750 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
12760 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
12770 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
12780 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
12790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
127a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
127b0 74 20 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69  t c;.  c = !sqli
127c0 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
127d0 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lue(&aMem[pOp->p
127e0 31 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20  1], !pOp->p3);. 
127f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12800 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
12810 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74   c ) goto jump_t
12820 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
12830 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
12840 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
12850 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
12860 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]==NULL goto
12870 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
12880 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12890 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
128a0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
128b0 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20  e OP_IsNull: {  
128c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
128d0 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20  e as TK_ISNULL, 
128e0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
128f0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
12900 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
12910 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
12920 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12930 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )!=0, 2);.  if( 
12940 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
12950 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
12960 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12970 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
12980 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
12990 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
129a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
129b0 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
129c0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
129d0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
129e0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
129f0 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
12a00 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
12a10 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
12a20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12a30 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
12a40 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
12a50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
12a60 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
12a70 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
12a80 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
12a90 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
12aa0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12ab0 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ll)==0 ){.    go
12ac0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12ad0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12ae0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c  * Opcode: IfNull
12af0 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Row P1 P2 P3 * *
12b00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
12b10 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e   P1.nullRow then
12b20 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74   r[P3]=NULL, got
12b30 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  o P2.**.** Check
12b40 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
12b50 6f 20 73 65 65 20 69 66 20 69 74 20 69 73 20 63  o see if it is c
12b60 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
12b70 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e  g at a NULL row.
12b80 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68  .** If it is, th
12b90 65 6e 20 73 65 74 20 72 65 67 69 73 74 65 72 20  en set register 
12ba0 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a  P3 to NULL and j
12bb0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
12bc0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20  to P2..** If P1 
12bd0 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c  is not on a NULL
12be0 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20   row, then fall 
12bf0 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20  through without 
12c00 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68  making any.** ch
12c10 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  anges..*/.case O
12c20 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20  P_IfNullRow: {  
12c30 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
12c40 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12c50 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
12c60 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
12c70 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
12c80 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
12c90 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
12ca0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52  [pOp->p1]->nullR
12cb0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
12cc0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
12cd0 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b  aMem + pOp->p3);
12ce0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12cf0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
12d00 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  k;.}..#ifdef SQL
12d10 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45  ITE_ENABLE_OFFSE
12d20 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70  T_SQL_FUNC./* Op
12d30 63 6f 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20  code: Offset P1 
12d40 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
12d50 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73  opsis: r[P3] = s
12d60 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29  qlite_offset(P1)
12d70 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
12d80 72 65 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74  register r[P3] t
12d90 68 65 20 62 79 74 65 20 6f 66 66 73 65 74 20 69  he byte offset i
12da0 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
12db0 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 74 68   file that is th
12dc0 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68  e.** start of th
12dd0 65 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68  e payload for th
12de0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
12df0 68 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  h that cursor P1
12e00 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a   is currently.**
12e10 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
12e20 20 50 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d   P2 is the colum
12e30 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
12e40 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
12e50 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29   sqlite_offset()
12e60 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68   function..** Th
12e70 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e  is opcode does n
12e80 6f 74 20 75 73 65 20 50 32 20 69 74 73 65 6c 66  ot use P2 itself
12e90 2c 20 62 75 74 20 74 68 65 20 50 32 20 76 61 6c  , but the P2 val
12ea0 75 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ue is used by th
12eb0 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61  e.** code genera
12ec0 74 6f 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32  tor.  The P1, P2
12ed0 2c 20 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64  , and P3 operand
12ee0 73 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  s to this opcode
12ef0 20 61 72 65 20 74 68 65 0a 2a 2a 20 61 73 20 61   are the.** as a
12f00 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e  s for OP_Column.
12f10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
12f20 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  de is only avail
12f30 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
12f40 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
12f50 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f  the.** -DSQLITE_
12f60 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
12f70 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a  L_FUNC option..*
12f80 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
12f90 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
12fa0 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75  out3 */.  VdbeCu
12fb0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
12fc0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
12fd0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
12fe0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
12ff0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
13000 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
13010 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
13020 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
13030 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56  ->p3];.  if( NEV
13040 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d  ER(pC==0) || pC-
13050 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13060 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
13070 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13080 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
13090 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
130a0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
130b0 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74  (pOut, sqlite3Bt
130c0 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63  reeOffset(pC->uc
130d0 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a  .pCursor));.  }.
130e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
130f0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
13100 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
13110 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NC */../* Opcode
13120 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
13130 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
13140 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13150 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13160 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13170 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13180 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13190 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
131a0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
131b0 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
131c0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
131d0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
131e0 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
131f0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
13200 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
13210 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
13220 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
13230 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
13240 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13250 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13260 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13270 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13280 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13290 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
132a0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
132b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
132c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f  *.** If the reco
132d0 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  rd contains fewe
132e0 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
132f0 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
13300 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
13310 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
13320 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
13330 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
13340 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13350 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13360 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13370 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13380 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13390 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
133a0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
133b0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
133c0 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
133d0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
133e0 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
133f0 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
13400 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
13410 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
13420 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
13430 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
13440 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
13450 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
13460 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
13470 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
13480 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13490 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
134a0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
134b0 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
134c0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  then.** the resu
134d0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
134e0 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
134f0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
13500 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
13510 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
13520 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
13530 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
13540 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
13550 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
13560 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
13570 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
13580 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
13590 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
135a0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
135b0 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
135c0 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
135d0 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
135e0 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
135f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
13600 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
13610 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
13620 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
13630 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
13640 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
13650 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
13660 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
13670 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
13680 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
13690 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
136a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
136b0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
136c0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
136d0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
136e0 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
136f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
13700 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
13710 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
13720 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
13730 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
13740 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
13750 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
13760 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
13770 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
13780 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
13790 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
137a0 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
137b0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
137c0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
137d0 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
137e0 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
137f0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
13800 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
13810 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
13820 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
13830 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
13840 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
13850 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
13860 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
13870 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
13880 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
13890 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
138a0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
138b0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
138c0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
138d0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
138e0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
138f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
13900 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
13910 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
13920 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28  cache is stale (
13930 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f  meaning it is no
13940 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  t currently poin
13950 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f  t at.  ** the co
13960 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20  rrect row) then 
13970 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
13980 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65  ate by doing the
13990 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a   necessary .  **
139a0 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f   B-Tree seek. */
139b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
139c0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
139d0 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28  &pC, &p2);.  if(
139e0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
139f0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
13a00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13a10 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
13a20 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
13a30 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
13a40 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
13a50 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
13a60 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
13a70 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
13a80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
13a90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
13aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
13ab0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
13ac0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
13ad0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
13ae0 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
13af0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13b00 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
13b10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13b20 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13b30 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
13b40 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65  ullRow );.  asse
13b50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
13b60 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  !=CURTYPE_SORTER
13b70 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63   );..  if( pC->c
13b80 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
13b90 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20  acheCtr ){      
13ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49            /*OPTI
13bb0 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
13bc0 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  E*/.    if( pC->
13bd0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
13be0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
13bf0 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
13c00 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  O ){.        /* 
13c10 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20  For the special 
13c20 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64  case of as pseud
13c30 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65  o-cursor, the se
13c40 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20  ekResult field. 
13c50 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69         ** identi
13c60 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65  fies the registe
13c70 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
13c80 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20   record */.     
13c90 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
13ca0 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20  eekResult>0 );. 
13cb0 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
13cc0 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75  Mem[pC->seekResu
13cd0 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  lt];.        ass
13ce0 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
13cf0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
13d00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
13d10 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
13d20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
13d30 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
13d40 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e  >szRow = pReg->n
13d50 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
13d60 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
13d70 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
13d80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13d90 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
13da0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
13db0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13dc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
13dd0 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72  lse{.      pCrsr
13de0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
13df0 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  r;.      assert(
13e00 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
13e10 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
13e20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
13e30 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73  rsr );.      ass
13e40 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
13e50 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
13e60 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70  Crsr) );.      p
13e70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
13e80 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
13e90 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
13ea0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
13eb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
13ec0 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72  yloadFetch(pCrsr
13ed0 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20  , &pC->szRow);. 
13ee0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13ef0 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c  >szRow<=pC->payl
13f00 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20  oadSize );.     
13f10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
13f20 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  ow<=65536 );  /*
13f30 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
13f40 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
13f50 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
13f60 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
13f70 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
13f80 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
13f90 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
13fa0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
13fb0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
13fc0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
13fd0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
13fe0 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
13ff0 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
14000 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29  Row, aOffset[0])
14010 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
14020 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20  rsed = 0;...    
14030 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f  if( pC->szRow<aO
14040 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20  ffset[0] ){     
14050 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
14060 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
14070 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
14080 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
14090 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
140a0 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
140b0 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
140c0 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
140d0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
140e0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
140f0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
14100 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
14110 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
14120 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
14130 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
14140 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
14150 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
14160 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
14170 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
14180 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
14190 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
141a0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
141b0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
141c0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
141d0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
141e0 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
141f0 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
14200 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
14210 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
14220 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
14230 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
14240 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
14250 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
14260 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
14270 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
14280 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
14290 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
142a0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
142b0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
142c0 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
142d0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
142e0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
142f0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
14300 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
14310 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
14320 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
14330 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
14340 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
14350 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
14360 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
14370 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
14380 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
14390 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
143a0 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
143b0 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
143c0 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66  ] > 98307 || aOf
143d0 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61  fset[0] > pC->pa
143e0 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
143f0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14400 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
14410 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
14420 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
14430 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14440 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f  .  By skipping o
14450 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65  ver the first fe
14460 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a  w tests.      **
14470 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61   (ex: pC->nHdrPa
14480 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65  rsed<=p2) in the
14490 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77   next section, w
144a0 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20  e achieve a.    
144b0 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20    ** measurable 
144c0 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e  performance gain
144d0 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
144e0 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   ** This branch 
144f0 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66  is taken even if
14500 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20   aOffset[0]==0. 
14510 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69   Such a record i
14520 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a  s never.      **
14530 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51   generated by SQ
14540 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20  Lite, and could 
14550 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  be considered co
14560 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65  rruption, but we
14570 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74  .      ** accept
14580 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63   it for historic
14590 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65  al reasons.  Whe
145a0 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c  n aOffset[0]==0,
145b0 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20   the code this. 
145c0 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a       ** branch j
145d0 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61  umps to reads pa
145e0 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
145f0 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65  e record, but ne
14600 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a  ver more.      *
14610 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74  * than a few byt
14620 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65  es.  Even if the
14630 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61   record occurs a
14640 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
14650 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63   page.      ** c
14660 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65  ontent area, the
14670 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63   "page header" c
14680 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70  omes after the p
14690 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  age content and 
146a0 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73  so.      ** this
146b0 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72   overread is har
146c0 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20  mless.  Similar 
146d0 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63  overreads can oc
146e0 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70  cur for a corrup
146f0 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62  t.      ** datab
14700 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20  ase file..      
14710 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
14720 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
14730 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
14740 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
14750 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
14760 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
14770 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
14780 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
14790 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
147a0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
147b0 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
147c0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
147d0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
147e0 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
147f0 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
14800 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
14810 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
14820 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
14830 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
14840 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
14850 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
14860 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
14870 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
14880 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
14890 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
148a0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
148b0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
148c0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
148d0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
148e0 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
148f0 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
14900 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
14910 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
14920 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14930 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
14940 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
14950 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
14960 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
14970 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
14980 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
14990 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
149a0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
149b0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
149c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
149d0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
149e0 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
149f0 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
14a00 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14a10 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
14a20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14a30 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
14a40 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
14a50 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14a60 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14a70 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
14a80 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
14a90 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
14aa0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
14ab0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
14ac0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
14ad0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
14ae0 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
14af0 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
14b00 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
14b10 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
14b20 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
14b30 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
14b40 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
14b50 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
14b60 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
14b70 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72    testcase( zHdr
14b80 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  >=zEndHdr );.   
14b90 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
14ba0 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
14bb0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
14bc0 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
14bd0 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
14be0 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
14bf0 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
14c00 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
14c10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
14c20 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
14c30 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
14c40 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
14c50 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
14c60 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
14c70 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
14c80 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
14c90 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
14ca0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
14cb0 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
14cc0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
14cd0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
14ce0 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
14cf0 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
14d00 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
14d10 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
14d20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
14d30 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
14d40 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
14d50 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
14d60 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
14d70 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
14d80 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
14d90 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
14da0 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
14db0 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
14dc0 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
14dd0 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
14de0 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
14df0 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
14e00 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
14e10 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
14e20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
14e30 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
14e40 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
14e50 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
14e60 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
14e70 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
14e80 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
14e90 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
14ea0 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
14eb0 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
14ec0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
14ed0 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
14ee0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
14ef0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
14f00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
14f10 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
14f20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
14f30 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
14f40 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14f50 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
14f60 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
14f70 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14f80 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
14f90 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
14fa0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
14fb0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
14fc0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
14fd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14fe0 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
14ff0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
15000 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
15010 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
15020 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
15030 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
15040 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
15050 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
15060 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
15070 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
15080 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
15090 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
150a0 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
150b0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
150c0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
150d0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
150e0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
150f0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
15100 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
15110 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
15120 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
15130 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
15140 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
15150 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
15160 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
15170 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
15180 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
15190 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
151a0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
151b0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
151c0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
151d0 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
151e0 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
151f0 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
15200 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
15210 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
15220 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
15230 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
15240 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
15250 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
15260 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
15270 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
15280 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
15290 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
152a0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
152b0 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
152c0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
152d0 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
152e0 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
152f0 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
15300 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
15310 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15320 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
15330 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
15340 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
15350 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
15360 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
15370 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
15380 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
15390 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
153a0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
153b0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
153c0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
153d0 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
153e0 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
153f0 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
15400 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
15410 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
15420 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
15430 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
15440 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
15450 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
15460 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
15470 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
15480 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
15490 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
154a0 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
154b0 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
154c0 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
154d0 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
154e0 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
154f0 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
15500 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
15510 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
15520 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
15530 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
15540 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
15550 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
15560 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
15570 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
15580 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
15590 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
155a0 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
155b0 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
155c0 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
155d0 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
155e0 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
155f0 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
15600 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
15610 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
15620 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15630 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
15640 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
15650 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
15660 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
15670 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
15680 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
15690 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
156a0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
156b0 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
156c0 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
156d0 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
156e0 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
156f0 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
15700 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
15710 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
15720 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
15730 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
15740 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
15750 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
15760 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
15770 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
15780 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
15790 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
157a0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
157b0 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
157c0 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
157d0 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
157e0 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
157f0 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
15800 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
15810 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15820 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
15830 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
15840 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
15850 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
15860 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
15870 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
15880 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
15890 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
158a0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
158b0 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
158c0 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
158d0 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
158e0 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
158f0 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
15900 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
15910 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
15920 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
15930 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
15940 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
15950 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
15960 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
15970 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
15980 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
15990 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
159a0 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
159b0 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
159c0 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
159d0 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
159e0 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
159f0 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
15a00 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
15a10 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
15a20 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15a30 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15a40 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
15a50 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
15a60 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
15a70 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
15a80 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
15a90 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
15aa0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
15ab0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
15ac0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
15ad0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
15ae0 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
15af0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15b00 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
15b10 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
15b20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15b30 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
15b40 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
15b50 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
15b60 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
15b70 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
15b80 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
15b90 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
15ba0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
15bb0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
15bc0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
15bd0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
15be0 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
15bf0 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
15c00 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
15c10 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
15c20 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
15c30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
15c40 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
15c50 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
15c60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
15c70 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
15c80 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
15c90 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
15ca0 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
15cb0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
15cc0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
15cd0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
15ce0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
15cf0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
15d00 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
15d10 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15d20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15d30 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
15d40 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
15d50 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
15d60 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
15d70 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
15d80 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
15d90 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
15da0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
15db0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
15dc0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
15dd0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
15de0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15df0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
15e00 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
15e10 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15e20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15e30 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
15e40 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
15e50 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15e60 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
15e70 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
15e80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
15e90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
15ea0 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
15eb0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
15ec0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
15ed0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
15ee0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
15ef0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
15f00 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
15f10 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
15f20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
15f30 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
15f40 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
15f50 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
15f60 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
15f70 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
15f80 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
15f90 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
15fa0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
15fb0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
15fc0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
15fd0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
15fe0 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
15ff0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
16000 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
16010 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
16020 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
16030 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
16040 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
16050 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
16060 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
16070 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
16080 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
16090 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
160a0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
160b0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
160c0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
160d0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
160e0 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
160f0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16100 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16110 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16120 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16130 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16140 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16150 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16160 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16170 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16180 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16190 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
161a0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
161b0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
161c0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
161d0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
161e0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
161f0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16200 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16210 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16220 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16240 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16250 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16270 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16280 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16290 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
162a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
162b0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
162c0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
162d0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
162e0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
162f0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16300 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16310 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16320 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16330 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16340 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16350 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16360 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16370 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16380 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16390 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
163a0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
163b0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
163c0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
163d0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
163e0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
163f0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
16400 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
16410 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
16420 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
16430 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16440 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
16450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16460 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
16470 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
16480 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16490 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
164a0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
164b0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
164c0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
164d0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
164e0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
164f0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
16500 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
16510 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
16520 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
16530 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
16540 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
16550 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
16560 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
16570 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
16580 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
16590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
165a0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
165b0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
165c0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
165d0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
165e0 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
165f0 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
16600 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
16610 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
16620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
16660 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
16670 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
16680 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
16690 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
166a0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
166b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
16700 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
16710 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
16720 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
16730 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
16740 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
16750 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
16760 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
16770 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
16780 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
16790 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
167a0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
167b0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
167c0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
167d0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
167e0 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
167f0 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
16800 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
16810 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
16820 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
16830 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
16840 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
16850 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
16860 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
16870 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
16880 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
16890 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
168a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
168b0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
168c0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
168d0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
168e0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
168f0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
16900 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
16910 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
16920 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
16930 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16940 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
16950 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
16960 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
16970 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
16980 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
16990 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
169a0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
169b0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
169c0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
169d0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
169e0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
169f0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
16a00 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
16a10 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
16a20 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
16a30 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
16a40 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
16a50 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
16a60 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
16a70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
16a80 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
16a90 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
16aa0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
16ab0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
16ac0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
16ad0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
16ae0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
16af0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
16b00 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
16b10 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
16b20 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
16b30 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16b40 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
16b50 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
16b60 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
16b70 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
16b80 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
16b90 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
16ba0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16bb0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
16bc0 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
16bd0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
16be0 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
16bf0 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
16c00 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
16c10 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
16c20 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
16c30 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
16c40 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
16c50 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
16c60 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
16c70 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
16c80 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
16c90 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
16ca0 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
16cb0 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
16cc0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
16cd0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
16ce0 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
16cf0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
16d00 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
16d10 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
16d20 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
16d30 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
16d40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
16d50 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
16d60 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
16d70 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
16d80 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
16d90 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
16da0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
16db0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
16dc0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
16dd0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
16de0 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
16df0 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
16e00 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
16e10 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
16e20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
16e30 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16e40 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
16e50 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
16e60 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
16e70 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
16e80 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
16e90 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
16ea0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
16eb0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
16ec0 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  f( serial_type==
16ed0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
16ee0 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f  Values with MEM_
16ef0 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72  Null and MEM_Zer
16f00 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79  o are created by
16f10 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c   xColumn virtual
16f20 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
16f30 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e  e methods that n
16f40 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69  ever invoke sqli
16f50 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78  te3_result_xxxxx
16f60 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20  () while.       
16f70 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e   ** computing an
16f80 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
16f90 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55  mn value in an U
16fa0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
16fb0 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65  .        ** Give
16fc0 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73   such values a s
16fd0 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d  pecial internal-
16fe0 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d  use-only serial-
16ff0 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20  type of 10.     
17000 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68     ** so that th
17010 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  ey can be passed
17020 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64   through to xUpd
17030 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20  ate and have.   
17040 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73       ** a true s
17050 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
17060 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20  hange(). */.    
17070 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17080 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48  >p5==OPFLAG_NOCH
17090 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52  NG_MAGIC || CORR
170a0 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
170b0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
170c0 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  10;.      }else 
170d0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
170e0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
170f0 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
17100 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
17110 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
17120 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
17130 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
17140 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
17150 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
17160 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17170 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
17180 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17190 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
171a0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
171b0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
171c0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
171d0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
171e0 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
171f0 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
17200 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63  _type);.    pRec
17210 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
17220 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70  _type;.    if( p
17230 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
17240 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
17250 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
17260 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
17270 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
17280 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
17290 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
172a0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
172b0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
172c0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
172d0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
172e0 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
172f0 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
17300 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
17310 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
17320 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
17330 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
17340 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
17350 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
17360 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
17370 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
17380 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
17390 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
173a0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
173b0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
173c0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
173d0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
173e0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
173f0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
17400 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
17410 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
17420 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
17430 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
17440 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
17450 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
17460 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
17470 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
17480 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
17490 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
174a0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
174b0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
174c0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
174d0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
174e0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
174f0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
17500 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
17510 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
17520 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
17530 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
17540 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
17550 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
17560 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
17570 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
17580 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
17590 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
175a0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
175b0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
175c0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
175d0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
175e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
175f0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
17600 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
17610 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
17620 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
17630 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
17640 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
17650 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
17660 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
17670 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
17680 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
17690 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
176a0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
176b0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
176c0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
176d0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
176e0 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
176f0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
17700 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
17710 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
17720 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
17730 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
17740 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
17750 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
17760 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
17770 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
17780 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
17790 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
177a0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
177b0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
177c0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
177d0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
177e0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
177f0 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
17800 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
17810 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
17820 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
17830 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
17840 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
17850 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
17860 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
17870 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
17880 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
17890 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
178a0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
178b0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
178c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
178d0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
178e0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
178f0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
17900 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
17910 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
17920 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
17930 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
17940 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
17950 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
17960 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
17970 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ro;.  }.  REGIST
17980 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
17990 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
179a0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
179b0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
179c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
179d0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
179e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
179f0 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
17a00 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
17a10 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
17a20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
17a30 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
17a40 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
17a50 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
17a60 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
17a70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17a80 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
17a90 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
17aa0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
17ab0 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
17ac0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
17ad0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  r;..  assert( p-
17ae0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
17af0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
17b00 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
17b10 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
17b20 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72  Op->p1]->uc.pCur
17b30 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
17b40 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
17b50 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
17b60 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
17b70 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
17b80 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
17b90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
17ba0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
17bb0 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  y);.  if( rc ) g
17bc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17bd0 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d  _error;.  pOut =
17be0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
17bf0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
17c00 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
17c10 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
17c20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
17c30 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
17c40 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
17c50 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
17c60 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
17c70 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
17c80 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
17c90 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
17ca0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
17cb0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
17cc0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
17cd0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
17ce0 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
17cf0 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
17d00 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
17d10 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
17d20 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
17d30 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
17d40 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
17d70 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
17d80 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
17db0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
17dc0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
17dd0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
17de0 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
17df0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
17e00 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
17e10 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
17e20 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
17e30 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
17e40 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
17e50 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
17e60 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
17e70 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
17e80 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
17e90 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
17ea0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
17eb0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
17ec0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
17ed0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
17ee0 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
17ef0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
17f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
17f10 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
17f20 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
17f30 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
17f40 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
17f50 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
17f60 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
17f70 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17f80 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
17f90 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
17fa0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
17fb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
17fc0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
17fd0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
17fe0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
17ff0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
18000 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
18010 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
18020 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
18030 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
18040 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
18050 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
18060 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
18070 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
18080 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
18090 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
180a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
180b0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  or(p, "cannot op
180c0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  en savepoint - S
180d0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
180e0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
180f0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18100 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18110 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
18120 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
18130 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
18140 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18150 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
18160 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
18170 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
18180 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
18190 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
181a0 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
181b0 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
181c0 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
181d0 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
181e0 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
181f0 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
18200 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
18210 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18220 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
18230 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
18240 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
18250 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
18260 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
18270 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18280 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
18290 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
182a0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
182b0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
182c0 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
182d0 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18300 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
18310 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
18320 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18330 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18340 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
18350 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
18360 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
18370 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
18380 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
18390 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
183a0 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  NN(db, sizeof(Sa
183b0 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
183c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
183d0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
183e0 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
183f0 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
18400 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
18410 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
18420 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
18430 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
18440 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
18450 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
18460 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
18470 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
18480 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
18490 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
184a0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
184b0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
184c0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
184d0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
184e0 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
184f0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
18500 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
18510 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
18520 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
18530 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
18540 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
18550 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
18560 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
18570 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
18580 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
18590 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
185a0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
185b0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
185c0 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
185d0 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
185e0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
185f0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
18600 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
18610 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18620 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
18630 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
18640 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
18650 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
18660 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
18670 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
18680 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
18690 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
186a0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
186b0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
186c0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
186d0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
186e0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
186f0 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
18700 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
18710 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
18720 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
18730 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
18740 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
18750 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
18760 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
18770 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
18780 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
18790 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
187a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
187b0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
187c0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
187d0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
187e0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
187f0 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
18800 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
18810 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
18820 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
18830 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
18840 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
18850 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
18860 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
18870 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
18880 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
18890 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
188a0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
188b0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65  (p, "cannot rele
188c0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
188d0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
188e0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
188f0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
18900 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
18910 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18920 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
18930 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
18940 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
18950 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
18960 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
18970 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
18980 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
18990 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
189a0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
189b0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
189c0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
189d0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
189e0 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
189f0 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
18a00 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
18a10 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
18a20 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
18a30 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
18a40 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
18a50 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
18a60 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
18a70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
18a80 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
18a90 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18aa0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18ab0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
18ac0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
18ad0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
18ae0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
18af0 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
18b00 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
18b10 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
18b20 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
18b30 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
18b40 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
18b50 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
18b60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18b70 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
18b80 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18b90 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18ba0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18bb0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
18bc0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
18bd0 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
18be0 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73  {.        int is
18bf0 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
18c00 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
18c10 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
18c20 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
18c30 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
18c40 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
18c50 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
18c60 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
18c70 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61  ge = (db->mDbFla
18c80 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65  gs & DBFLAG_Sche
18c90 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20  maChange)!=0;.  
18ca0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
18cb0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
18cc0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
18cd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18ce0 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73  eeTripAllCursors
18cf0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
18d00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
18d30 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a  ABORT_ROLLBACK,.
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
18d70 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20  hange==0);.     
18d80 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
18d90 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
18da0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18db0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
18dc0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
18dd0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
18de0 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20  aChange = 0;.   
18df0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
18e00 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
18e10 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
18e20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18e30 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
18e40 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
18e50 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18e60 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
18e70 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18e80 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
18e90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18ea0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
18eb0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
18ec0 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d       if( isSchem
18ed0 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20  aChange ){.     
18ee0 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
18ef0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
18f00 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
18f10 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
18f20 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
18f30 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
18f40 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61        db->mDbFla
18f50 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68  gs |= DBFLAG_Sch
18f60 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
18f70 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
18f80 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
18f90 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
18fa0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
18fb0 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
18fc0 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
18fd0 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
18fe0 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
18ff0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
19000 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
19010 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
19020 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
19030 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
19040 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
19050 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
19060 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
19070 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
19080 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
19090 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
190a0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
190b0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
190c0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
190d0 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
190e0 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
190f0 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
19100 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
19110 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
19120 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
19130 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
19140 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
19150 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
19160 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
19170 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
19180 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19190 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
191a0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
191b0 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
191c0 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
191d0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
191e0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
191f0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
19200 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
19210 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
19220 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
19230 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19240 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
19250 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
19260 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
19270 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
19280 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
19290 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
192a0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
192b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
192c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
192d0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
192e0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
192f0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
19300 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
19310 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
19320 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
19330 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
19340 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
19350 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
19360 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
19370 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
19380 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
19390 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
193a0 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
193b0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
193c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
193d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
193e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
193f0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
19400 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
19410 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62  e_to_error;..  b
19420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19430 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
19440 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
19450 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
19460 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
19470 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
19480 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
19490 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
194a0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
194b0 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
194c0 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
194d0 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
194e0 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
194f0 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
19500 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
19510 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
19520 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
19530 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
19540 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
19550 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
19560 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
19570 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
19580 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
19590 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
195a0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
195b0 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
195c0 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
195d0 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20  nt iRollback;.. 
195e0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
195f0 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
19600 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
19610 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64  >p2;.  assert( d
19620 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19630 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
19640 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
19650 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19660 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
19670 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
19680 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e  .  assert( db->n
19690 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20  VdbeActive>0 ); 
196a0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
196b0 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
196c0 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  ve */.  assert( 
196d0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
196e0 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75  .  if( desiredAu
196f0 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
19700 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
19710 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
19720 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
19730 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19740 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
19750 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
19760 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
19770 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
19780 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
19790 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
197a0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
197b0 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64  ommit && db->nVd
197c0 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
197d0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
197e0 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
197f0 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
19800 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
19810 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  writing.      **
19820 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
19830 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
19840 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
19850 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
19860 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  st. .      */.  
19870 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
19880 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
19890 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
198a0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  on - ".         
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
198d0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
198e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
198f0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
19900 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19910 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
19920 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
19930 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
19940 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
19950 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
19960 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
19970 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
19980 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
19990 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
199a0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  it;.    }.    if
199b0 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
199c0 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
199d0 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
199e0 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
199f0 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
19a00 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
19a10 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
19a20 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
19a30 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
19a40 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
19a50 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
19a60 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
19a70 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
19a80 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
19a90 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
19aa0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
19ab0 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
19ac0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
19ad0 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
19ae0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
19af0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
19b00 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
19b10 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
19b20 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
19b30 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
19b40 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
19b50 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
19b60 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
19b70 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
19b80 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
19b90 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
19ba0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
19bb0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
19bc0 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
19bf0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
19c00 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
19c10 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
19c20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19c30 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19c40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
19c50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19c60 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
19c70 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
19c80 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
19c90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
19ca0 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
19cb0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
19cc0 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
19cd0 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
19ce0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
19cf0 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
19d00 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19d10 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
19d20 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
19d30 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
19d40 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
19d50 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
19d60 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
19d70 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
19d80 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
19d90 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
19da0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
19db0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
19dc0 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
19dd0 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
19de0 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
19df0 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
19e00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
19e10 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
19e20 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
19e30 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
19e40 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
19e50 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
19e60 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
19e70 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
19e80 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
19e90 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
19ea0 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
19eb0 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
19ec0 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
19ed0 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
19ee0 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
19ef0 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
19f00 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
19f10 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
19f20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
19f30 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
19f40 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19f50 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
19f60 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
19f70 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
19f80 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19f90 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
19fa0 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
19fb0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
19fc0 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
19fd0 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
19fe0 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
19ff0 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
1a000 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
1a010 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1a020 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
1a030 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
1a040 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
1a050 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1a060 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1a070 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
1a080 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
1a090 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
1a0a0 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
1a0b0 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
1a0c0 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
1a0d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
1a0e0 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
1a0f0 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
1a100 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
1a110 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
1a120 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
1a130 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
1a140 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
1a150 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
1a160 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
1a170 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
1a180 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
1a190 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
1a1a0 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
1a1b0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
1a1c0 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
1a1d0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1a1e0 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
1a1f0 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
1a200 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
1a210 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
1a220 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1a230 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
1a240 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
1a250 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
1a260 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
1a270 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1a280 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
1a290 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
1a2a0 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
1a2b0 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1a2c0 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
1a2d0 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
1a2e0 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
1a2f0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1a300 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
1a310 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
1a320 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
1a330 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
1a340 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
1a350 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
1a360 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
1a370 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
1a380 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
1a390 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
1a3a0 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
1a3b0 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
1a3c0 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
1a3d0 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  Bt;.  int iMeta;
1a3e0 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20  .  int iGen;..  
1a3f0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1a400 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1a410 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1a420 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
1a430 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a440 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a450 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1a460 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a470 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a480 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66  pOp->p1) );.  if
1a490 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
1a4a0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
1a4b0 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
1a4c0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1a4d0 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
1a4e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a4f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
1a500 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
1a510 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
1a520 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
1a530 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1a540 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
1a550 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74  p->p2);.    test
1a560 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1a570 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29  _BUSY_SNAPSHOT )
1a580 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a590 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a5a0 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20  RECOVERY );.    
1a5b0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a5c0 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  K ){.      if( (
1a5d0 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
1a5e0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
1a5f0 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1a600 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1a610 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
1a620 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
1a630 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
1a640 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a650 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a660 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
1a670 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
1a680 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
1a690 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
1a6a0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1a6b0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
1a6c0 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
1a6d0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
1a6e0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
1a6f0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
1a700 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
1a710 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
1a720 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
1a730 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
1a740 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
1a750 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
1a760 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
1a770 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
1a780 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
1a790 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
1a7a0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
1a7b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
1a7c0 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
1a7d0 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
1a7e0 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
1a7f0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1a800 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a810 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a820 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
1a830 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
1a840 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1a850 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
1a860 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1a870 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1a880 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
1a890 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
1a8a0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
1a8b0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a8c0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1a8d0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
1a8e0 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
1a8f0 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
1a900 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
1a910 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
1a920 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1a930 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a940 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1a950 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
1a960 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1a970 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
1a980 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
1a990 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a9a0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
1a9b0 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
1a9c0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1a9d0 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20  : R-03189-51135 
1a9e0 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74  As each SQL stat
1a9f0 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20  ement runs, the 
1aa00 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65  schema.    ** ve
1aa10 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64  rsion is checked
1aa20 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
1aa30 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e  the schema has n
1aa40 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65  ot changed since
1aa50 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20   the.    ** SQL 
1aa60 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72  statement was pr
1aa70 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  epared..    */. 
1aa80 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
1aa90 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
1aaa0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1aab0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1aac0 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
1aad0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1aae0 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
1aaf0 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
1ab00 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
1ab10 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
1ab20 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1ab30 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1ab40 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
1ab50 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
1ab60 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
1ab70 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
1ab80 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1ab90 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
1aba0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
1abb0 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
1abc0 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
1abd0 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
1abe0 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
1abf0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
1ac00 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
1ac10 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
1ac20 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
1ac30 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
1ac40 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
1ac50 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1ac60 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
1ac70 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
1ac80 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1ac90 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1aca0 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
1acb0 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
1acc0 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
1acd0 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
1ace0 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
1acf0 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
1ad00 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
1ad10 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
1ad20 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
1ad30 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
1ad40 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
1ad50 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
1ad60 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
1ad70 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
1ad80 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
1ad90 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
1ada0 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
1adb0 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
1adc0 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
1add0 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
1ade0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
1adf0 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
1ae00 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1ae10 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
1ae20 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
1ae30 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
1ae40 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
1ae50 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
1ae60 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
1ae70 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
1ae80 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
1ae90 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
1aea0 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
1aeb0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
1aec0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
1aed0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1aee0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1aef0 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
1af00 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
1af10 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
1af20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
1af30 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1af40 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
1af50 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
1af60 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1af70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1af80 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1af90 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
1afa0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1afb0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
1afc0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
1afd0 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
1afe0 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
1aff0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1b000 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
1b010 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1b020 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
1b030 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1b040 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
1b050 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1b060 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
1b070 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1b080 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
1b090 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1b0a0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
1b0b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1b0c0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
1b0d0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1b0e0 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1b0f0 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1b100 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1b110 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1b120 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1b130 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1b140 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1b150 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1b160 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1b170 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1b180 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1b190 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1b1a0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1b1b0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1b1c0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1b1d0 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1b1e0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b1f0 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1b200 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1b210 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1b220 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1b230 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1b240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1b250 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1b260 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1b270 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1b280 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1b290 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1b2a0 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1b2b0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1b2c0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1b2d0 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1b2e0 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1b2f0 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1b300 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1b310 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1b320 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1b330 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b340 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1b350 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1b360 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ite the integer 
1b370 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f  value P3 into co
1b380 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
1b390 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a  f database P1..*
1b3a0 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73  * P2==1 is the s
1b3b0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1b3c0 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
1b3d0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1b3e0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
1b3f0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1b400 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
1b410 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1b420 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
1b430 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1b440 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1b450 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
1b460 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
1b470 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b480 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
1b490 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
1b4a0 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
1b4b0 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
1b4c0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
1b4d0 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62  etCookie: {.  Db
1b4e0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
1b4f0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
1b500 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1b510 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b520 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b530 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b540 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b550 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b560 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
1b570 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1b580 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
1b590 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
1b5a0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
1b5b0 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1b5c0 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1b5d0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
1b5e0 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
1b5f0 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
1b600 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
1b610 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
1b620 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
1b630 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
1b640 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
1b650 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  ->p2, pOp->p3);.
1b660 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
1b670 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
1b680 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
1b690 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
1b6a0 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
1b6b0 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
1b6c0 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
1b6d0 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
1b6e0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1b6f0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  e = pOp->p3;.   
1b700 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d   db->mDbFlags |=
1b710 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
1b720 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ange;.  }else if
1b730 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1b740 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1b750 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1b760 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1b770 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1b780 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1b790 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d  le_format = pOp-
1b7a0 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  >p3;.  }.  if( p
1b7b0 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
1b7c0 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
1b7d0 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
1b7e0 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
1b7f0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
1b800 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
1b810 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
1b820 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
1b830 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
1b840 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
1b850 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
1b860 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
1b870 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1b880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b890 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b8a0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
1b8b0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
1b8c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1b8d0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1b8e0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
1b8f0 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
1b900 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1b910 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
1b920 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
1b930 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
1b940 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
1b950 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
1b960 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
1b970 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
1b980 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
1b990 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
1b9a0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
1b9b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b9c0 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
1b9d0 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
1b9e0 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
1b9f0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
1ba00 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
1ba10 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
1ba20 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
1ba30 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
1ba40 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
1ba50 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
1ba60 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
1ba70 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
1ba80 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
1ba90 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
1baa0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
1bab0 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
1bac0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1bad0 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
1bae0 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
1baf0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
1bb00 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
1bb10 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
1bb20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
1bb30 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
1bb40 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
1bb50 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
1bb60 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
1bb70 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
1bb80 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
1bb90 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
1bba0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
1bbb0 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
1bbc0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
1bbd0 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
1bbe0 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
1bbf0 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
1bc00 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
1bc10 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
1bc20 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
1bc30 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
1bc40 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
1bc50 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
1bc60 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
1bc70 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
1bc80 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
1bc90 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1bca0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
1bcb0 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
1bcc0 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
1bcd0 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
1bce0 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
1bcf0 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
1bd00 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1bd10 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1bd20 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1bd30 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1bd40 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1bd50 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1bd60 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1bd70 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1bd80 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1bd90 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1bda0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1bdb0 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1bdc0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1bdd0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1bde0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1bdf0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1be00 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1be10 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1be20 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1be30 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1be40 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1be50 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
1be60 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65   also: OpenWrite
1be70 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f  , ReopenIdx.*/./
1be80 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e  * Opcode: Reopen
1be90 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20  Idx P1 P2 P3 P4 
1bea0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1beb0 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1bec0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1bed0 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  dx opcode works 
1bee0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61  exactly like Rea
1bef0 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61  dOpen except tha
1bf00 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68  t it first.** ch
1bf10 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
1bf20 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20  he cursor on P1 
1bf30 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  is already open 
1bf40 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65  with a root page
1bf50 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32  .** number of P2
1bf60 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68   and if it is th
1bf70 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65  is opcode become
1bf80 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f  s a no-op.  In o
1bf90 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69  ther words,.** i
1bfa0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1bfb0 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f  already open, do
1bfc0 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a   not reopen it..
1bfd0 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1bfe0 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f  Idx opcode may o
1bff0 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68  nly be used with
1c000 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20   P5==0 and with 
1c010 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34  P4 being.** a P4
1c020 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e  _KEYINFO object.
1c030 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74    Furthermore, t
1c040 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1c050 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a   be the same as.
1c060 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52  ** every other R
1c070 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e  eopenIdx or Open
1c080 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d  Read for the sam
1c090 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  e cursor number.
1c0a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f  .**.** See the O
1c0b0 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64  penRead opcode d
1c0c0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1c0d0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1c0e0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
1c0f0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
1c100 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1c110 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1c120 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1c130 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
1c140 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
1c150 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
1c160 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
1c170 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
1c180 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
1c190 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
1c1a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
1c1b0 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
1c1c0 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
1c1d0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1c1e0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1c1f0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1c200 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1c210 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1c220 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1c230 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1c240 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1c250 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
1c260 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
1c270 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
1c280 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1c290 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1c2a0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
1c2b0 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
1c2c0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
1c2d0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1c2e0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
1c2f0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
1c300 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c310 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72  in the table, or
1c320 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65   to the.** large
1c330 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20  st index of any 
1c340 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61  column of the ta
1c350 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75  ble that is actu
1c360 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a  ally used..**.**
1c370 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1c380 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
1c390 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
1c3a0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
1c3b0 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
1c3c0 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
1c3d0 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
1c3e0 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
1c3f0 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
1c400 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
1c410 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
1c420 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1c430 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
1c440 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
1c450 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
1c460 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b   OP_ReopenIdx: {
1c470 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1c480 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1c490 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1c4a0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1c4b0 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1c4c0 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1c4d0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1c4e0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  b;..  assert( pO
1c4f0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1c500 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1c510 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1c520 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1c530 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
1c540 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
1c550 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
1c560 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
1c570 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
1c580 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
1c590 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
1c5a0 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
1c5b0 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
1c5c0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1c5d0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  */.    goto open
1c5e0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1c5f0 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  s;.  }.  /* If t
1c600 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1c610 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1c620 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1c630 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1c640 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1c650 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1c660 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1c670 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61  e a reopen */.ca
1c680 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
1c690 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
1c6a0 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e:..  assert( pO
1c6b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1c6c0 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1c6d0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1c6e0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1c6f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1c700 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1c710 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1c720 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1c730 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1c740 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1c750 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1c760 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1c770 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1c780 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1c790 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b  _ABORT_ROLLBACK;
1c7a0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
1c7b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1c7c0 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b  }..  nField = 0;
1c7d0 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b  .  pKeyInfo = 0;
1c7e0 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
1c7f0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33  .  iDb = pOp->p3
1c800 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1c810 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1c820 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1c830 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1c840 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1c850 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1c860 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
1c870 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
1c880 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
1c890 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c8a0 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
1c8b0 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1c8c0 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45  _FORDELETE==BTRE
1c8d0 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20  E_FORDELETE );. 
1c8e0 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45     wrFlag = BTRE
1c8f0 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e  E_WRCSR | (pOp->
1c900 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44  p5 & OPFLAG_FORD
1c910 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65  ELETE);.    asse
1c920 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1c930 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
1c940 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
1c950 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
1c960 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
1c970 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1c980 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
1c990 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1c9a0 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
1c9b0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
1c9c0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1c9d0 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
1c9e0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
1c9f0 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45   & OPFLAG_P2ISRE
1ca00 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  G ){.    assert(
1ca10 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
1ca20 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65  ert( p2<=(p->nMe
1ca30 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
1ca40 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1ca50 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1ca60 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1ca70 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1ca80 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1ca90 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1caa0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1cab0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1cac0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1cad0 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1cae0 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1caf0 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1cb00 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1cb10 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f  OP_CreateBtree o
1cb20 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1cb30 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1cb40 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1cb50 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1cb60 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1cb70 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1cb80 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1cb90 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1cba0 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1cbb0 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1cbc0 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1cbd0 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1cbe0 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73  ction. */.    as
1cbf0 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20  sert( p2>=2 );. 
1cc00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1cc10 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1cc20 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1cc30 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1cc40 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1cc50 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1cc60 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1cc70 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1cc80 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1cc90 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1cca0 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d  ->nAllField;.  }
1ccb0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1ccc0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1ccd0 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1cce0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1ccf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1cd00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1cd10 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1cd20 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1cd30 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1cd40 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1cd50 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1cd60 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1cd70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1cd80 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1cd90 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55   nField, iDb, CU
1cda0 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1cdb0 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1cdc0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1cdd0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1cde0 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1cdf0 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1ce00 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69  gnoRoot = p2;.#i
1ce10 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1ce20 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67  G.  pCur->wrFlag
1ce30 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69   = wrFlag;.#endi
1ce40 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
1ce50 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1ce60 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1ce70 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70  Info, pCur->uc.p
1ce80 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1ce90 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1cea0 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74  Info;.  /* Set t
1ceb0 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1cec0 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1ced0 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1cee0 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1cef0 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1cf00 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1cf10 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1cf20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1cf30 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1cf40 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1cf50 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1cf60 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1cf70 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1cf80 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1cf90 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1cfa0 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1cfb0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1cfc0 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a  e!=P4_KEYINFO;..
1cfd0 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1cfe0 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28  hints:.  assert(
1cff0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1d000 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1d010 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
1d020 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45  LAG_SEEKEQ==BTRE
1d030 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74  E_SEEK_EQ );.  t
1d040 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
1d050 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1d060 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  R );.#ifdef SQLI
1d070 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
1d080 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73  _HINTS.  testcas
1d090 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  e( pOp->p2 & OPF
1d0a0 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65  LAG_SEEKEQ );.#e
1d0b0 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74  ndif.  sqlite3Bt
1d0c0 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61  reeCursorHintFla
1d0d0 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  gs(pCur->uc.pCur
1d0e0 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
1d110 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1d120 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b  PFLAG_SEEKEQ)));
1d130 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1d140 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d150 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1d160 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1d170 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Dup P1 P2 * * *.
1d180 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1d190 20 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20   cursor P1 that 
1d1a0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61  points to the sa
1d1b0 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  me ephemeral tab
1d1c0 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20  le as.** cursor 
1d1d0 50 32 2e 20 20 54 68 65 20 50 32 20 63 75 72 73  P2.  The P2 curs
1d1e0 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
1d1f0 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72  n opened by a pr
1d200 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ior OP_OpenEphem
1d210 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20  eral.** opcode. 
1d220 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20   Only ephemeral 
1d230 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64  cursors may be d
1d240 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  uplicated..**.**
1d250 20 44 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d   Duplicate ephem
1d260 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65  eral cursors are
1d270 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a   used for self-j
1d280 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c  oins of material
1d290 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63  ized views..*/.c
1d2a0 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20  ase OP_OpenDup: 
1d2b0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1d2c0 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65  pOrig;    /* The
1d2d0 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72   original cursor
1d2e0 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65   to be duplicate
1d2f0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1d300 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20  r *pCx;      /* 
1d310 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a  The new cursor *
1d320 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e  /..  pOrig = p->
1d330 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  apCsr[pOp->p2];.
1d340 20 20 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d    assert( pOrig-
1d350 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20  >pBtx!=0 );  /* 
1d360 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63  Only ephemeral c
1d370 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75  ursors can be du
1d380 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70  plicated */..  p
1d390 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1d3a0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1d3b0 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d  pOrig->nField, -
1d3c0 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  1, CURTYPE_BTREE
1d3d0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1d3e0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d3f0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1d400 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1d410 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78  meral = 1;.  pCx
1d420 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72  ->pKeyInfo = pOr
1d430 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  ig->pKeyInfo;.  
1d440 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70  pCx->isTable = p
1d450 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  Orig->isTable;. 
1d460 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d470 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e  eeCursor(pOrig->
1d480 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  pBtx, MASTER_ROO
1d490 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  T, BTREE_WRCSR,.
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70            pCx->p
1d4c0 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63  KeyInfo, pCx->uc
1d4d0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20  .pCursor);.  /* 
1d4e0 54 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65  The sqlite3Btree
1d4f0 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65  Cursor() routine
1d500 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66   can only fail f
1d510 6f 72 20 74 68 65 20 66 69 72 73 74 20 63 75 72  or the first cur
1d520 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  sor.  ** opened 
1d530 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e 20  for a database. 
1d540 20 53 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   Since there is 
1d550 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20  already an open 
1d560 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73  cursor when this
1d570 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20  .  ** opcode is 
1d580 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33  run, the sqlite3
1d590 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 63 61  BtreeCursor() ca
1d5a0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61  nnot fail */.  a
1d5b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1d5c0 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b  E_OK );.  break;
1d5d0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1d5e0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1d5f0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1d600 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1d610 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1d620 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1d630 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1d640 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1d650 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1d660 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1d670 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1d680 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1d690 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1d6a0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1d6b0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1d6c0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1d6d0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1d6e0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1d6f0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1d700 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1d710 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1d720 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1d730 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1d740 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1d750 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1d760 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1d770 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1d780 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1d790 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1d7a0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1d7b0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1d7c0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1d7d0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1d7e0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1d7f0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1d800 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1d810 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1d820 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1d830 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1d840 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1d850 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1d860 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1d870 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1d880 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1d890 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1d8a0 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1d8b0 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1d8c0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1d8d0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1d8e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1d8f0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1d900 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1d910 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1d920 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1d930 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1d940 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1d950 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1d960 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1d970 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1d980 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1d990 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1d9a0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1d9b0 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1d9c0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1d9d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1d9e0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1d9f0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1da00 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1da10 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1da20 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1da30 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1da40 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1da50 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1da60 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1da70 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1da80 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1da90 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1daa0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1dab0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1dac0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1dad0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1dae0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1daf0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1db00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1db10 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1db20 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1db30 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1db40 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  2, -1, CURTYPE_B
1db50 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78  TREE);.  if( pCx
1db60 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1db70 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1db80 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1db90 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1dba0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dbb0 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c  eeOpen(db->pVfs,
1dbc0 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42   0, db, &pCx->pB
1dbd0 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  tx, .           
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1dbf0 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1dc00 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c  | BTREE_SINGLE |
1dc10 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61   pOp->p5, vfsFla
1dc20 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  gs);.  if( rc==S
1dc30 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1dc40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1dc50 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
1dc60 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20  >pBtx, 1);.  }. 
1dc70 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1dc80 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
1dc90 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1dca0 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
1dcb0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
1dcc0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
1dcd0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1dce0 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
1dcf0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
1dd00 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
1dd10 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1dd20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1dd30 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1dd40 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
1dd50 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1dd60 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
1dd70 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
1dd80 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
1dd90 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1dda0 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49   if( (pCx->pKeyI
1ddb0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d  nfo = pKeyInfo =
1ddc0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1ddd0 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  o)!=0 ){.      i
1dde0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
1ddf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1de00 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1de10 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1de20 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1de30 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
1de40 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1de50 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1de60 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1de70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1de80 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1de90 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1dea0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1deb0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1dec0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1ded0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1dee0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1def0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1df00 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1df10 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e  r(pCx->pBtx, pgn
1df20 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  o, BTREE_WRCSR,.
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75  pKeyInfo, pCx->u
1df60 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
1df70 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1df80 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1df90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1dfa0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1dfb0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1dfc0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1dfd0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1e000 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1e010 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1e020 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1e030 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1e040 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e050 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  r;.  pCx->isOrde
1e060 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1e070 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1e080 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e090 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1e0a0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1e0b0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1e0c0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1e0d0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1e0e0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1e0f0 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1e100 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1e110 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1e120 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1e130 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1e140 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1e150 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1e160 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1e170 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1e180 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1e190 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1e1a0 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1e1b0 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1e1c0 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1e1d0 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1e1e0 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1e1f0 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1e200 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1e210 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1e220 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1e230 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1e240 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1e250 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1e260 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1e270 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e280 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1e290 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1e2a0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1e2b0 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1e2c0 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
1e2d0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1e2e0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1e2f0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1e300 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1e310 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1e320 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1e330 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1e340 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1e350 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1e360 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1e370 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1e380 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
1e390 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e3a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1e3b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e3c0 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1e3d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1e3e0 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1e3f0 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1e400 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1e410 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1e420 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1e430 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1e440 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1e450 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1e460 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1e470 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1e480 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1e490 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1e4a0 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1e4b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1e4c0 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1e4d0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e4e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e4f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e500 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1e510 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e520 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1e530 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1e540 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1e550 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1e560 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1e570 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e580 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1e590 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1e5a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1e5b0 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1e5c0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1e5d0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1e5e0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1e5f0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1e600 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1e610 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1e620 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1e630 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1e640 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1e650 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1e660 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1e670 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1e680 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1e690 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1e6a0 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1e6b0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1e6c0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1e6d0 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1e6e0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1e6f0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1e700 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1e710 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1e720 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1e730 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1e740 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1e750 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1e760 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1e770 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1e780 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1e790 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1e7a0 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1e7b0 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1e7c0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1e7d0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1e7e0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1e7f0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1e800 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1e810 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1e820 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1e830 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1e840 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1e850 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1e860 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e870 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1e880 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1e890 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1e8a0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1e8b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1e8c0 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1e8d0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1e8e0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1e8f0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1e900 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65  1;.  pCx->seekRe
1e910 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  sult = pOp->p2;.
1e920 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1e930 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68   1;.  /* Give th
1e940 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  is pseudo-cursor
1e950 20 61 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72   a fake BtCursor
1e960 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74   pointer so that
1e970 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65   pCx.  ** can be
1e980 20 73 61 66 65 6c 79 20 70 61 73 73 65 64 20 74   safely passed t
1e990 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  o sqlite3VdbeCur
1e9a0 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68  sorMoveto().  Th
1e9b0 69 73 20 61 76 6f 69 64 73 20 61 20 74 65 73 74  is avoids a test
1e9c0 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65  .  ** for pCx->e
1e9d0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1e9e0 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66  _BTREE inside of
1e9f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1ea00 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20  orMoveto().  ** 
1ea10 77 68 69 63 68 20 69 73 20 61 20 70 65 72 66 6f  which is a perfo
1ea20 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74  rmance optimizat
1ea30 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63  ion */.  pCx->uc
1ea40 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74  .pCursor = sqlit
1ea50 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64  e3BtreeFakeValid
1ea60 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65  Cursor();.  asse
1ea70 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1ea80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1ea90 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1eaa0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1eab0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1eac0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1ead0 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1eae0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1eaf0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1eb00 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1eb10 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1eb20 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1eb30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1eb40 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1eb50 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1eb60 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1eb70 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1eb80 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1eb90 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1eba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
1ebb0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1ebc0 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1ebd0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  K./* Opcode: Col
1ebe0 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20  umnsUsed P1 * * 
1ebf0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1ec00 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e  opcode (which on
1ec10 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c  ly exists if SQL
1ec20 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ite was compiled
1ec30 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
1ec40 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1ec50 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66  ED_MASK) identif
1ec60 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  ies which column
1ec70 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c  s of the.** tabl
1ec80 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63  e or index for c
1ec90 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65  ursor P1 are use
1eca0 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62  d.  P4 is a 64-b
1ecb0 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50  it integer.** (P
1ecc0 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63  4_INT64) in whic
1ecd0 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62  h the first 63 b
1ece0 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20  its are one for 
1ecf0 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66  each of the.** f
1ed00 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20  irst 63 columns 
1ed10 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
1ed20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61  index that are a
1ed30 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20  ctually used.** 
1ed40 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  by the cursor.  
1ed50 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  The high-order b
1ed60 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79  it is set if any
1ed70 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a   column after.**
1ed80 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65   the 64th is use
1ed90 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  d..*/.case OP_Co
1eda0 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56  lumnsUsed: {.  V
1edb0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1edc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1edd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1ede0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1edf0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1ee00 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64  ;.  pC->maskUsed
1ee10 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70   = *(u64*)pOp->p
1ee20 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
1ee30 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
1ee40 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20  code: SeekGE P1 
1ee50 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1ee60 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ee70 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1ee80 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ee90 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1eea0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1eeb0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1eec0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1eed0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1eee0 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1eef0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ef00 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1ef10 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1ef20 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1ef30 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1ef40 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1ef50 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1ef60 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1ef70 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1ef80 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1ef90 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1efa0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1efb0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1efc0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1efd0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1efe0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1eff0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1f000 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1f010 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1f020 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1f030 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1f040 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1f050 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1f060 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
1f070 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
1f080 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
1f090 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
1f0a0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
1f0b0 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
1f0c0 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
1f0d0 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
1f0e0 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
1f0f0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f100 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
1f110 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
1f120 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
1f130 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
1f140 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f  ed by an IdxLE o
1f150 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
1f160 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
1f170 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f  * The IdxLE opco
1f180 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
1f190 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
1f1a0 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
1f1b0 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63  the.** IdxLE opc
1f1c0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1f1d0 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
1f1e0 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
1f1f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1f200 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1f210 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1f220 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1f230 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1f240 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1f250 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1f260 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1f270 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1f280 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1f290 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1f2a0 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1f2b0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1f2c0 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1f2d0 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1f2e0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1f2f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1f300 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1f310 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1f320 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1f330 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1f340 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1f350 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1f360 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1f370 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1f380 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1f390 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1f3a0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1f3b0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1f3c0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1f3d0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1f3e0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1f3f0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1f400 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1f410 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1f420 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1f430 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1f440 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1f450 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1f460 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1f470 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1f480 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1f490 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1f4a0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1f4b0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1f4c0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1f4d0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1f4e0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1f4f0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1f500 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1f510 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1f520 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1f530 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1f540 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1f550 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1f560 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1f570 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1f580 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1f590 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1f5a0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1f5b0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1f5c0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1f5d0 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1f5e0 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1f5f0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1f600 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1f610 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1f620 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1f630 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1f640 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1f650 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1f660 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1f670 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1f680 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1f690 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1f6a0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1f6b0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1f6c0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1f6d0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1f6e0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1f6f0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1f700 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1f710 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1f720 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1f730 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1f740 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1f750 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1f760 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1f770 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1f780 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1f790 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1f7a0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1f7b0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1f7c0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f7d0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1f7e0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1f7f0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1f800 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1f810 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1f820 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1f830 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1f840 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1f850 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1f860 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1f870 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f880 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1f890 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1f8a0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1f8b0 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1f8c0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1f8d0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1f8e0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1f8f0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1f900 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1f910 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1f920 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1f930 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1f940 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1f950 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1f960 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1f970 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1f980 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1f990 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1f9a0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1f9b0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1f9c0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1f9d0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1f9e0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1f9f0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1fa00 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1fa10 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1fa20 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1fa30 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1fa40 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1fa50 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1fa60 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1fa70 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1fa80 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1fa90 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1faa0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1fab0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1fac0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1fad0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1fae0 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1faf0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1fb00 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1fb10 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1fb20 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1fb30 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1fb40 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1fb50 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1fb60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1fb70 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
1fb80 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
1fb90 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
1fba0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1fbb0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1fbc0 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
1fbd0 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
1fbe0 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
1fbf0 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
1fc00 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1fc10 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
1fc20 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
1fc30 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
1fc40 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
1fc50 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47  lowed by an IdxG
1fc60 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
1fc70 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
1fc80 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f  ..** The IdxGE o
1fc90 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
1fca0 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
1fcb0 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
1fcc0 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20  ut the.** IdxGE 
1fcd0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1fce0 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
1fcf0 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
1fd00 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
1fd10 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1fd20 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
1fd30 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
1fd40 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20  se OP_SeekLT:   
1fd50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1fd60 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1fd70 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLE:         /*
1fd80 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1fd90 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20  se OP_SeekGE:   
1fda0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1fdb0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1fdc0 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGT: {       /*
1fdd0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1fde0 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1fdf0 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
1fe00 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74   result */.  int
1fe10 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   oc;            
1fe20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56  /* Opcode */.  V
1fe30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
1fe40 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20    /* The cursor 
1fe50 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70  to seek */.  Unp
1fe60 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20  ackedRecord r;  
1fe70 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65  /* The key to se
1fe80 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ek for */.  int 
1fe90 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  nField;        /
1fea0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
1feb0 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e  mns or fields in
1fec0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36   the key */.  i6
1fed0 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
1fee0 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1fef0 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1ff00 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b  */.  int eqOnly;
1ff10 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
1ff20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d  interested in ==
1ff30 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61   results */..  a
1ff40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1ff50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1ff60 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1ff70 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
1ff80 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ff90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ffa0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ffb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
1ffc0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
1ffd0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
1ffe0 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20  t( OP_SeekLE == 
1fff0 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20  OP_SeekLT+1 );. 
20000 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
20010 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GE == OP_SeekLT+
20020 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
20030 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53  P_SeekGT == OP_S
20040 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73  eekLT+3 );.  ass
20050 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
20060 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
20070 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
20080 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d  0 );.  oc = pOp-
20090 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c  >opcode;.  eqOnl
200a0 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c  y = 0;.  pC->nul
200b0 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66  lRow = 0;.#ifdef
200c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
200d0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
200e0 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
200f0 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ..  if( pC->isTa
20100 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
20110 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  e BTREE_SEEK_EQ 
20120 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74  flag is only set
20130 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72   on index cursor
20140 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  s */.    assert(
20150 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20160 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
20170 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
20180 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20  _SEEK_EQ)==0.   
20190 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f             || CO
201a0 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20  RRUPT_DB );..   
201b0 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
201c0 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
201d0 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
201e0 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
201f0 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c  tring,.    ** bl
20200 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75  ob, or NULL.  Bu
20210 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65  t it needs to be
20220 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f   an integer befo
20230 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20  re we can do.   
20240 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
20250 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a   convert it. */.
20260 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
20270 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69  [pOp->p3];.    i
20280 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
20290 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
202a0 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
202b0 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
202c0 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
202d0 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20  nity(pIn3, 0);. 
202e0 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20     }.    iKey = 
202f0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
20300 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20  lue(pIn3);..    
20310 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
20320 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
20330 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
20340 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
20350 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
20360 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
20370 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
20380 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
20390 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
203a0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
203b0 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
203c0 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
203d0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
203e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
203f0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
20400 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
20410 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
20420 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
20430 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
20440 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
20450 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
20460 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
20470 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
20480 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a  ken(1,2); goto j
20490 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
204a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
204b0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
204c0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
204d0 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20   iKey is larger 
204e0 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
204f0 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
20500 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
20510 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61  itute >= for > a
20520 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67  nd < for <=. e.g
20530 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20  . if the search 
20540 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73  term.      ** is
20550 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74   4.9 and the int
20560 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69  eger approximati
20570 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20  on 5:.      **. 
20580 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
20590 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20  x >  4.9)    -> 
205a0 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20      (x >= 5).   
205b0 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
205c0 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  <= 4.9)    ->   
205d0 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20    (x <  5).     
205e0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49   */.      if( pI
205f0 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29  n3->u.r<(double)
20600 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
20610 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
20620 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29  E==(OP_SeekGT-1)
20630 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
20640 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28  rt( OP_SeekLT==(
20650 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a  OP_SeekLE-1) );.
20660 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20670 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30  (OP_SeekLE & 0x0
20680 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
20690 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
206a0 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
206b0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
206c0 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kGT & 0x0001) ) 
206d0 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  oc--;.      }.. 
206e0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
206f0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
20700 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61  y is smaller tha
20710 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
20720 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
20730 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
20740 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20  te <= for < and 
20750 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20  > for >=.  */.  
20760 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e      else if( pIn
20770 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69  3->u.r>(double)i
20780 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
20790 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
207a0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
207b0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
207c0 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
207d0 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
207e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
207f0 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
20800 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
20810 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
20820 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
20830 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
20840 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
20850 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
20860 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
20870 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20880 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
20890 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
208a0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
208b0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
208c0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
208d0 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
208e0 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  te */.    if( rc
208f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20900 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20910 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20920 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
20930 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72   /* For a cursor
20940 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
20950 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e  SEEK_EQ hint, on
20960 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45  ly the OP_SeekGE
20970 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53   and.    ** OP_S
20980 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72  eekLE opcodes ar
20990 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74  e allowed, and t
209a0 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d  hese must be imm
209b0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65  ediately followe
209c0 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f  d.    ** by an O
209d0 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
209e0 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
209f0 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
20a00 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20  he same key..   
20a10 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69   */.    if( sqli
20a20 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
20a30 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
20a40 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
20a50 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71  _EQ) ){.      eq
20a60 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
20a70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
20a80 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
20a90 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
20aa0 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
20ab0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20ac0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
20ad0 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
20ae0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
20af0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20b00 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p1==pOp[0].
20b10 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p1 );.      asse
20b20 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
20b30 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
20b40 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20b50 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29  .p3==pOp[0].p3 )
20b60 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20b70 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70  pOp[1].p4.i==pOp
20b80 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20  [0].p4.i );.    
20b90 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  }..    nField = 
20ba0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
20bb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
20bc0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
20bd0 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
20be0 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
20bf0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
20c00 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
20c10 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
20c20 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
20c30 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
20c40 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
20c50 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
20c60 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
20c70 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc==OP_SeekGT ||
20c80 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
20c90 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
20ca0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
20cb0 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a      **   }else{.
20cc0 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
20cd0 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20  ault_rc = +1;.  
20ce0 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a    **   }.    */.
20cf0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
20d00 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f   = ((1 & (oc - O
20d10 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20  P_SeekLT)) ? -1 
20d20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72  : +1);.    asser
20d30 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54  t( oc!=OP_SeekGT
20d40 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20d50 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
20d60 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
20d70 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
20d80 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
20d90 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20da0 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GE || r.default_
20db0 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73  rc==+1 );.    as
20dc0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20dd0 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLT || r.default
20de0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20  _rc==+1 );..    
20df0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
20e00 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
20e10 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
20e20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
20e30 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
20e40 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
20e50 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
20e60 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
20e70 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b     r.eqSeen = 0;
20e80 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20e90 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
20ea0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
20eb0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
20ec0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
20ed0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20ee0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20ef0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20f00 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e    }.    if( eqOn
20f10 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d  ly && r.eqSeen==
20f20 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
20f30 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20  t( res!=0 );.   
20f40 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74     goto seek_not
20f50 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20  _found;.    }.  
20f60 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  }.  pC->deferred
20f70 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
20f80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
20f90 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
20fa0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
20fb0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
20fc0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
20fd0 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65  .  if( oc>=OP_Se
20fe0 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28  ekGE ){  assert(
20ff0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c   oc==OP_SeekGE |
21000 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  | oc==OP_SeekGT 
21010 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30  );.    if( res<0
21020 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
21030 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b  c==OP_SeekGT) ){
21040 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
21050 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21060 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
21070 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  uc.pCursor, 0);.
21080 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
21090 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
210a0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
210b0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
210c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
210d0 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65  OK;.          re
210e0 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  s = 1;.        }
210f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
21100 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21110 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
21120 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
21130 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
21140 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
21150 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21160 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
21170 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
21180 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
21190 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
211a0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
211b0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
211c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
211d0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
211e0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
211f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
21200 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
21210 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
21220 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
21230 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
21240 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
21250 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
21260 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
21270 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21280 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21290 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
212a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
212b0 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
212c0 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
212d0 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
212e0 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
212f0 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
21300 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
21310 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
21320 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
21330 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72  eEof(pC->uc.pCur
21340 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
21350 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a  seek_not_found:.
21360 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21370 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61  2>0 );.  VdbeBra
21380 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
21390 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
213a0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
213b0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  o_p2;.  }else if
213c0 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20  ( eqOnly ){.    
213d0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
213e0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
213f0 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
21400 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
21410 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70    pOp++; /* Skip
21420 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72   the OP_IdxLt or
21430 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66   OP_IdxGT that f
21440 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20  ollows */.  }.  
21450 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21460 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
21470 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
21480 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
21490 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
214a0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
214b0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
214c0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
214d0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
214e0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
214f0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
21500 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
21510 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
21520 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
21530 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
21540 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
21550 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
21560 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
21570 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
21580 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
21590 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
215a0 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
215b0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
215c0 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
215d0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
215e0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
215f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
21600 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
21610 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
21620 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
21630 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
21640 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
21650 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
21660 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
21670 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
21680 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
21690 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
216a0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
216b0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
216c0 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
216d0 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
216e0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
216f0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
21700 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
21710 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
21720 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
21730 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
21740 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
21750 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
21760 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
21770 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
21780 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
21790 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
217a0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
217b0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
217c0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
217d0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
217e0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
217f0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
21800 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
21810 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
21820 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
21830 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
21840 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
21850 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
21860 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
21870 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
21880 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
21890 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
218a0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
218b0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
218c0 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
218d0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
218e0 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
218f0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
21900 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
21910 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21920 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21930 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
21940 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
21950 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
21960 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
21970 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
21980 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
21990 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
219a0 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
219b0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
219c0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
219d0 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
219e0 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
219f0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
21a00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
21a10 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
21a20 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
21a30 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
21a40 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
21a50 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
21a60 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
21a70 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
21a80 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
21a90 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
21aa0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
21ab0 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
21ac0 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
21ad0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
21ae0 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
21af0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
21b00 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
21b10 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
21b20 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
21b30 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
21b40 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
21b50 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
21b60 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
21b70 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
21b80 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
21b90 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
21ba0 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
21bb0 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
21bc0 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
21bd0 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
21be0 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
21bf0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
21c00 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
21c10 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
21c20 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
21c30 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
21c40 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
21c50 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
21c60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
21c70 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
21c80 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
21c90 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
21ca0 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
21cb0 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
21cc0 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
21cd0 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
21ce0 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
21cf0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
21d00 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
21d10 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
21d20 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
21d30 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
21d40 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
21d50 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21d60 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
21d70 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
21d80 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
21d90 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
21da0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21db0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
21dc0 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
21dd0 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
21de0 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
21df0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
21e00 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
21e10 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
21e20 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
21e30 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21e40 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
21e50 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
21e60 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
21e70 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
21e80 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
21e90 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
21ea0 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
21eb0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
21ec0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
21ed0 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
21ee0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21ef0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21f00 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
21f10 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
21f20 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
21f30 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21f40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21f50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21f60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21f70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21f80 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21f90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21fa0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21fb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21fc0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21fd0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
21fe0 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
21ff0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22000 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
22010 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
22020 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
22030 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
22040 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
22050 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
22060 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
22070 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
22080 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
22090 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
220a0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
220b0 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
220c0 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
220d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
220e0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
220f0 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
22100 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
22110 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
22120 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
22130 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
22140 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
22150 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
22160 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
22170 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
22180 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
22190 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
221a0 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
221b0 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
221c0 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
221d0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
221e0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
221f0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
22200 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
22210 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
22220 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22230 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
22240 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20  QLITE_NOMEM );. 
22250 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
22260 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72   no_mem;.    pFr
22270 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73  ee = pIdxKey = s
22280 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
22290 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43  npackedRecord(pC
222a0 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
222b0 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
222c0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
222d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
222e0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
222f0 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
22300 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
22310 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
22320 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
22330 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
22340 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
22350 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
22360 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
22370 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
22380 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
22390 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
223a0 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
223b0 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
223c0 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
223d0 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
223e0 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
223f0 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
22400 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
22410 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
22420 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
22430 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
22440 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
22450 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
22460 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
22470 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
22480 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
22490 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
224a0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
224b0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
224c0 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
224d0 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
224e0 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
224f0 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  NN(db, pFree);. 
22500 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
22510 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
22520 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
22530 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
22540 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
22550 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
22560 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
22570 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
22580 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
22590 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
225a0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
225b0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
225c0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
225d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
225e0 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
225f0 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
22600 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
22610 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
22620 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
22630 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
22640 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
22650 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
22660 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
22670 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
22680 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
22690 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
226a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
226b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
226c0 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
226d0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
226e0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
226f0 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
22700 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
22710 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
22720 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
22730 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
22740 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
22750 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
22760 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
22770 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
22780 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
22790 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
227a0 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
227b0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
227c0 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
227d0 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
227e0 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
227f0 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
22800 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
22810 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
22820 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
22830 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
22840 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
22850 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
22860 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
22870 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
22880 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
22890 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
228a0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
228b0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
228c0 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
228d0 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
228e0 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
228f0 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
22900 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
22910 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
22920 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
22930 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
22940 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
22950 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
22960 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
22970 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
22980 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
22990 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
229a0 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
229b0 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
229c0 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
229d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
229e0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
229f0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
22a00 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
22a10 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
22a20 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
22a30 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
22a40 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
22a50 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
22a60 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
22a70 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
22a80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22a90 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
22aa0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
22ab0 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
22ac0 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
22ad0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
22ae0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
22af0 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
22b00 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
22b10 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
22b20 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
22b30 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
22b40 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
22b50 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
22b60 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
22b70 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
22b80 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
22b90 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
22ba0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
22bb0 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
22bc0 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
22bd0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
22be0 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
22bf0 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
22c00 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
22c10 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
22c20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
22c30 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
22c40 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
22c50 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
22c60 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
22c70 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
22c80 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
22c90 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
22ca0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
22cb0 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
22cc0 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
22cd0 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
22ce0 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
22cf0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
22d00 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
22d10 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
22d20 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
22d30 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
22d40 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
22d50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
22d60 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
22d70 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
22d80 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
22d90 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
22da0 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
22db0 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
22dc0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22dd0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
22de0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
22df0 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
22e00 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
22e10 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
22e20 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
22e30 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
22e40 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
22e50 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
22e60 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
22e70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
22e80 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
22e90 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
22ea0 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
22eb0 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
22ec0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
22ed0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
22ee0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22ef0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22f00 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
22f10 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
22f20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
22f30 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
22f40 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
22f50 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
22f60 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51  ffinity(pIn3, SQ
22f70 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
22f80 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
22f90 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
22fa0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
22fb0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
22fc0 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  2;.  }.  /* Fall
22fd0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
22fe0 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61  _NotExists */.ca
22ff0 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
23000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
23010 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  p, in3 */.  pIn3
23020 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
23030 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
23040 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
23050 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
23060 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23070 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23080 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23090 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
230a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
230b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
230c0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
230d0 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
230e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
230f0 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
23100 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
23110 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
23120 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
23130 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
23140 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
23150 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
23160 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
23170 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23180 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
23190 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
231a0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73   0, &res);.  ass
231b0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
231c0 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a  OK || res==0 );.
231d0 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
231e0 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
231f0 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
23200 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   */.  pC->nullRo
23210 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 0;.  pC->cac
23220 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
23230 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65  _STALE;.  pC->de
23240 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
23250 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
23260 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
23270 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
23280 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73  = res;.  if( res
23290 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
232a0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
232b0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
232c0 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
232d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
232e0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  UPT_BKPT;.    }e
232f0 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  lse{.      goto 
23300 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
23310 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
23320 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23330 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
23340 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23350 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
23360 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
23370 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
23380 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
23390 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
233a0 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
233b0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
233c0 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
233d0 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
233e0 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
233f0 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
23400 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
23410 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
23420 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
23430 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
23440 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
23450 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
23460 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
23470 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
23480 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23490 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
234a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
234b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
234c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
234d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
234e0 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
234f0 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74  E_VTAB );.  pOut
23500 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
23510 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
23520 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
23530 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
23540 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
23550 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
23560 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
23570 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
23580 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
23590 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
235a0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
235b0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
235c0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
235d0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
235e0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
235f0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
23600 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
23610 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
23620 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
23630 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
23640 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
23650 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
23660 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
23670 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
23680 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
23690 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
236a0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
236b0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
236c0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
236d0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
236e0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
236f0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
23700 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
23710 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
23720 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
23730 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
23740 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
23750 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
23760 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
23770 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
23780 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
23790 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
237a0 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
237b0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
237c0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
237d0 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
237e0 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
237f0 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
23800 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
23810 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
23820 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
23830 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
23840 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
23850 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
23860 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
23870 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
23880 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
23890 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
238a0 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
238b0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
238c0 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
238d0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
238e0 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
238f0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
23900 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
23910 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
23920 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
23930 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
23940 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23960 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
23970 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
23980 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
23990 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
239a0 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
239b0 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
239c0 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
239d0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75    res = 0;.  pOu
239e0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
239f0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
23a00 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23a10 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23a20 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
23a30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23a40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23a50 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23a60 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
23a70 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
23a80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
23a90 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
23aa0 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65   {.    /* The ne
23ab0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
23ac0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
23ad0 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
23ae0 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
23af0 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
23b00 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
23b10 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
23b20 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
23b30 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
23b40 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
23b50 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
23b60 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
23b70 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
23b80 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
23b90 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
23ba0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
23bb0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
23bc0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
23bd0 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
23be0 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
23bf0 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
23c00 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
23c10 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
23c20 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
23c30 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
23c40 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
23c50 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
23c60 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
23c70 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
23c80 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
23c90 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
23ca0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
23cb0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
23cc0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
23cd0 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
23ce0 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
23cf0 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
23d00 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
23d10 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
23d20 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23d30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
23d40 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
23d50 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
23d60 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
23d70 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
23d80 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
23d90 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
23da0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
23db0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
23dc0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
23dd0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
23de0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
23df0 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
23e00 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
23e10 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
23e20 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
23e30 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
23e40 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
23e50 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
23e60 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
23e70 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
23e80 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
23e90 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
23ea0 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
23eb0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
23ec0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
23ed0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23ee0 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43  eeLast(pC->uc.pC
23ef0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
23f00 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23f10 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
23f20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23f30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23f40 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  }.      if( res 
23f50 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31  ){.        v = 1
23f60 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31  ;   /* IMP: R-61
23f70 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20  914-48074 */.   
23f80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23f90 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
23fa0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
23fb0 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  lid(pC->uc.pCurs
23fc0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76  or) );.        v
23fd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
23fe0 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
23ff0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
24000 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
24010 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
24020 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
24030 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
24040 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
24050 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
24060 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
24070 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
24080 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64    }.    }..#ifnd
24090 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
240a0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
240b0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
240c0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
240d0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
240e0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
240f0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
24100 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
24110 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
24120 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  e ){.        for
24130 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
24140 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
24150 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
24160 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
24170 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
24180 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
24190 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
241a0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
241b0 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
241c0 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
241d0 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
241e0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
241f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
24200 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
24210 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
24220 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
24230 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
24240 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
24250 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
24260 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
24270 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
24280 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
24290 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
242a0 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
242b0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
242c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
242d0 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
242e0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
242f0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
24300 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
24310 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
24320 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
24330 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
24340 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
24350 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
24360 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
24370 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
24380 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
24390 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
243a0 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
243b0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
243c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37   /* IMP: R-17817
243d0 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20  -00630 */.      
243e0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
243f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
24400 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
24410 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
24420 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
24430 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
24440 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
24450 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
24460 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
24470 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
24480 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
24490 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
244a0 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
244b0 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
244c0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
244d0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
244e0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
244f0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
24500 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
24510 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
24520 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
24530 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
24540 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
24550 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
24560 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
24570 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
24580 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
24590 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
245a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
245b0 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
245c0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
245d0 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
245e0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
24610 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
24620 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
24630 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
24640 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
24650 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
24660 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
24670 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
24680 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
24690 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
246a0 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
246b0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
246c0 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
246d0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
246e0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
246f0 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
24730 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
24740 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
24750 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
24760 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
24770 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
24780 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
24790 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
247a0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
247b0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
247c0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
247d0 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
247e0 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
247f0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
24800 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
24810 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
24820 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
24830 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
24840 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
24850 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
24860 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
24870 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24880 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  TALE;.  }.  pOut
24890 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
248a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
248b0 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
248c0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
248d0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
248e0 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  ] data=r[P2].**.
248f0 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
24900 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
24910 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
24920 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
24930 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
24940 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
24950 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
24960 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
24970 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
24980 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
24990 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
249a0 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
249b0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
249c0 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
249d0 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
249e0 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
249f0 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
24a00 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
24a10 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24a20 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
24a30 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
24a40 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
24a50 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
24a60 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
24a70 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
24a80 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
24a90 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
24aa0 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
24ab0 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
24ac0 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
24ad0 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
24ae0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
24af0 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
24b00 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
24b10 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
24b20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
24b30 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24b40 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
24b50 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  et, the implemen
24b60 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20  tation might.** 
24b70 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76  run faster by av
24b80 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65  oiding an unnece
24b90 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75  ssary seek on cu
24ba0 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65  rsor P1.  Howeve
24bb0 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  r,.** the OPFLAG
24bc0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
24bd0 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65  lag must only be
24be0 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61   set if there ha
24bf0 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72  ve been no prior
24c00 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65  .** seeks on the
24c10 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68   cursor or if th
24c20 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65  e most recent se
24c30 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71  ek used a key eq
24c40 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a  ual to P3..**.**
24c50 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
24c60 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
24c70 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
24c80 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
24c90 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
24ca0 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
24cb0 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
24cc0 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
24cd0 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
24ce0 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
24cf0 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
24d00 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
24d10 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
24d20 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
24d30 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
24d40 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
24d50 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20  oint to a Table 
24d60 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61  structure, or ma
24d70 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
24d80 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c   is .** not NULL
24d90 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
24da0 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e  e-hook (sqlite3.
24db0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
24dc0 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20   is invoked .** 
24dd0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
24de0 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
24df0 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
24e00 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
24e10 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
24e20 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
24e30 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
24e40 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
24e50 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
24e60 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
24e70 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
24e80 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
24e90 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
24ea0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
24eb0 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
24ec0 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
24ed0 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
24ee0 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
24ef0 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
24f00 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
24f10 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
24f20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
24f30 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
24f40 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
24f50 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
24f60 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
24f70 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
24f80 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
24f90 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
24fa0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
24fb0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33  opsis: intkey=P3
24fc0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
24fd0 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
24fe0 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
24ff0 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
25000 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
25010 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
25020 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
25030 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
25040 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
25050 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
25060 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
25070 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
25080 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
25090 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
250a0 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
250b0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
250c0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
250d0 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
250e0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
250f0 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
25100 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
25110 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
25120 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
25130 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
25140 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
25150 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  n */.  int seekR
25160 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
25170 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
25180 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
25190 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
251a0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
251b0 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
251c0 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
251d0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
251e0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
251f0 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  b;      /* Table
25200 20 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65   structure - use
25210 64 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20  d by update and 
25220 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73  pre-update hooks
25230 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f   */.  BtreePaylo
25240 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f  ad x;   /* Paylo
25250 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  ad to be inserte
25260 64 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20  d */..  pData = 
25270 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
25280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25290 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
252a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
252b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
252c0 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70  id(pData) );.  p
252d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
252e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
252f0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
25300 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
25310 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
25320 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25330 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
25340 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70  ;.  assert( (pOp
25350 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25360 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54  NOOP) || pC->isT
25370 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
25380 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25390 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e  4_TABLE || pOp->
253a0 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49  p4type>=P4_STATI
253b0 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  C );.  REGISTER_
253c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
253d0 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f  Data);..  if( pO
253e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
253f0 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
25400 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25410 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
25420 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
25430 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65  _Int );.    asse
25440 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
25450 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49  Key) );.    REGI
25460 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
25470 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78  p3, pKey);.    x
25480 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e  .nKey = pKey->u.
25490 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
254a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
254b0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
254c0 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  t );.    x.nKey 
254d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
254e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
254f0 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
25500 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
25510 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
25520 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
25530 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
25540 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e  b[pC->iDb].zDbSN
25550 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
25560 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
25570 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
25580 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
25590 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28  OP) || HasRowid(
255a0 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65  pTab) );.  }else
255b0 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a  {.    pTab = 0;.
255c0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
255d0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
255e0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
255f0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
25600 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25610 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
25620 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
25630 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
25640 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
25650 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20  .  if( pTab ){. 
25660 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55     if( db->xPreU
25670 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
25680 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
25690 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 29 7b  LAG_ISUPDATE) ){
256a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
256b0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
256c0 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
256d0 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
256e0 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29   x.nKey,pOp->p2)
256f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
25700 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25710 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e  ack==0 || pTab->
25720 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aCol==0 ){.     
25730 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f 73 74   /* Prevent post
25740 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f  -update hook fro
25750 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73  m running in cas
25760 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f 75 6c  es when it shoul
25770 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70  d not */.      p
25780 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Tab = 0;.    }. 
25790 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
257a0 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
257b0 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66   ) break;.#endif
257c0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
257d0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
257e0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
257f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
25800 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
25810 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
25820 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73  d = x.nKey;.  as
25830 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
25840 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
25850 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78 2e 70  EM_Str) );.  x.p
25860 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b  Data = pData->z;
25870 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61  .  x.nData = pDa
25880 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73  ta->n;.  seekRes
25890 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
258a0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
258b0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
258c0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
258d0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
258e0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
258f0 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44      x.nZero = pD
25900 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
25910 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65  }else{.    x.nZe
25920 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e  ro = 0;.  }.  x.
25930 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d  pKey = 0;.  rc =
25940 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
25950 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ert(pC->uc.pCurs
25960 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 28 70  or, &x,.      (p
25970 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
25980 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53  _APPEND|OPFLAG_S
25990 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73  AVEPOSITION)), s
259a0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
259b0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
259c0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
259d0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
259e0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
259f0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
25a00 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25a10 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
25a20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
25a30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
25a40 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73   pTab ){.    ass
25a50 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61 74 65  ert( db->xUpdate
25a60 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20  Callback!=0 );. 
25a70 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d     assert( pTab-
25a80 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20  >aCol!=0 );.    
25a90 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25aa0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
25ab0 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28  rg,.           (
25ac0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
25ad0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
25ae0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
25af0 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20  ITE_INSERT,.    
25b00 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62         zDb, pTab
25b10 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29  ->zName, x.nKey)
25b20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25b30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
25b40 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ete P1 P2 P3 P4 
25b50 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P5.**.** Delete 
25b60 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
25b70 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
25b80 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
25b90 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49  ointing..**.** I
25ba0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56  f the OPFLAG_SAV
25bb0 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
25bc0 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   the P5 paramete
25bd0 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a  r is set, then.*
25be0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * the cursor wil
25bf0 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
25c00 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68  ng at  either th
25c10 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
25c20 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
25c30 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
25c40 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
25c50 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
25c60 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
25c70 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
25c80 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
25c90 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20   be a no-op. As 
25ca0 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69  a result, in thi
25cb0 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20  s case.** it is 
25cc0 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72  ok to delete a r
25cd0 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
25ce0 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49  n a Next loop. I
25cf0 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56  f .** OPFLAG_SAV
25d00 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
25d10 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68   P5 is clear, th
25d20 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  en the cursor wi
25d30 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e  ll be.** left in
25d40 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74   an undefined st
25d50 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ate..**.** If th
25d60 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
25d70 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  TE bit is set on
25d80 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61   P5, that indica
25d90 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  tes that this.**
25da0 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73   delete one of s
25db0 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65  everal associate
25dc0 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20  d with deleting 
25dd0 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
25de0 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63  all its.** assoc
25df0 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72  iated index entr
25e00 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e  ies.  Exactly on
25e10 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74  e of those delet
25e20 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61  es is the "prima
25e30 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20  ry".** delete.  
25e40 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61  The others are a
25e50 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52  ll on OPFLAG_FOR
25e60 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f  DELETE cursors o
25e70 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61  r else are.** ma
25e80 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55  rked with the AU
25e90 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a  XDELETE flag..**
25ea0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
25eb0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
25ec0 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74  f P2 (NB: P2 not
25ed0 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65   P5) is set, the
25ee0 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61  n the row.** cha
25ef0 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  nge count is inc
25f00 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
25f10 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
25f20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
25f30 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
25f40 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
25f50 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
25f60 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
25f70 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
25f80 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70  t NULL then it p
25f90 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65  oints to a Table
25fa0 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73   object. In this
25fb0 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a   case either .**
25fc0 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70   the update or p
25fd0 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
25fe0 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20  or both, may be 
25ff0 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20  invoked. The P1 
26000 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68  cursor must.** h
26010 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
26020 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  ned using OP_Not
26030 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
26040 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
26050 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20  ode in .** this 
26060 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c  case. Specifical
26070 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ly, if one is co
26080 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72  nfigured, the pr
26090 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73  e-update hook is
260a0 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20   .** invoked if 
260b0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P4 is not NULL. 
260c0 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  The update-hook 
260d0 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e  is invoked if on
260e0 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
260f0 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e   .** P4 is not N
26100 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46  ULL, and the OPF
26110 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
26120 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a   is set in P2..*
26130 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
26140 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
26150 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74   is set in P2, t
26160 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  hen P3 contains 
26170 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f  the address.** o
26180 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
26190 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
261a0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74  the value that t
261b0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
261c0 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73  row will.** be s
261d0 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64  et to by the upd
261e0 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
261f0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
26200 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f  Cursor *pC;.  co
26210 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
26220 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
26230 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20  int opflags;..  
26240 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70  opflags = pOp->p
26250 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
26260 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26270 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26280 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26290 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
262a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
262b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
262c0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
262d0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
262e0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
262f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26300 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26310 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66  to==0 );..#ifdef
26320 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26330 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
26340 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73  =P4_TABLE && Has
26350 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54  Rowid(pOp->p4.pT
26360 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ab) && pOp->p5==
26370 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70  0 ){.    /* If p
26380 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73  5 is zero, the s
26390 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
263a0 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
263b0 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
263c0 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65  o.    ** OP_Dele
263d0 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73  te will have als
263e0 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
263f0 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
26400 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
26410 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20  .    ** the row 
26420 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65  that is being de
26430 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34  leted */.    i64
26440 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42   iKey = sqlite3B
26450 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
26460 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
26470 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
26480 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
26490 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
264a0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
264b0 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
264c0 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
264d0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
264e0 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
264f0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
26500 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
26510 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
26520 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
26530 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
26540 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
26550 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
26560 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
26570 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
26580 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
26590 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
265a0 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
265b0 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
265c0 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
265d0 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
265e0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
265f0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
26600 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
26610 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
26620 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
26630 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
26640 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
26650 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30   pOp->p4.pTab!=0
26660 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
26670 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
26680 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
26690 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
266a0 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
266b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45  p5 & OPFLAG_SAVE
266c0 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20  POSITION)!=0 && 
266d0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
266e0 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
266f0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42  arget = sqlite3B
26700 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
26710 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
26720 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
26730 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a     zDb = 0;   /*
26740 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
26750 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
26760 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
26770 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e   pTab = 0;  /* N
26780 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
26790 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
267a0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
267b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
267c0 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
267d0 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
267e0 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
267f0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
26800 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
26810 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
26820 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62   && pOp->p4.pTab
26830 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
26840 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  !(opflags & OPFL
26850 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20  AG_ISUPDATE) .  
26860 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77         || HasRow
26870 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20  id(pTab)==0 .   
26880 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70        || (aMem[p
26890 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20  Op->p3].flags & 
268a0 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b  MEM_Int) .    );
268b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
268c0 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
268d0 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70   pC,.        (op
268e0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
268f0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
26900 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
26910 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20  E_DELETE, .     
26920 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43     zDb, pTab, pC
26930 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a  ->movetoTarget,.
26940 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
26950 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28      );.  }.  if(
26960 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
26970 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
26980 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  ;.#endif. .  /* 
26990 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20  Only flags that 
269a0 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53  can be set are S
269b0 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20  AVEPOISTION and 
269c0 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20  AUXDELETE */ .  
269d0 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
269e0 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45   & ~(OPFLAG_SAVE
269f0 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f  POSITION|OPFLAG_
26a00 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29  AUXDELETE))==0 )
26a10 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
26a20 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d  AG_SAVEPOSITION=
26a30 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54  =BTREE_SAVEPOSIT
26a40 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ION );.  assert(
26a50 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
26a60 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45  E==BTREE_AUXDELE
26a70 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  TE );..#ifdef SQ
26a80 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
26a90 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b   p->pFrame==0 ){
26aa0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45  .    if( pC->isE
26ab0 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20  phemeral==0.    
26ac0 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20      && (pOp->p5 
26ad0 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  & OPFLAG_AUXDELE
26ae0 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  TE)==0.        &
26af0 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20  & (pC->wrFlag & 
26b00 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
26b10 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
26b20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
26b30 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
26b40 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
26b50 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
26b60 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
26b70 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
26b80 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ndif..  rc = sql
26b90 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
26ba0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
26bb0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
26bc0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26bd0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
26be0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
26bf0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26c00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26c10 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ror;..  /* Invok
26c20 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
26c30 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
26c40 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
26c50 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
26c60 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
26c70 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62  ge++;.    if( db
26c80 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
26c90 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  k && HasRowid(pT
26ca0 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ab) ){.      db-
26cb0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
26cc0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
26cd0 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
26ce0 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
26cf0 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ,.          pC->
26d00 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
26d10 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
26d20 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d  >iDb>=0 );.    }
26d30 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
26d40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
26d50 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
26d60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
26d70 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
26d80 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
26d90 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
26da0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
26db0 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
26dc0 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
26dd0 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
26de0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
26df0 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
26e00 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
26e10 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
26e20 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
26e30 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
26e40 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
26e50 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
26e60 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
26e70 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
26e80 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
26e90 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
26ea0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26eb0 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
26ec0 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
26ed0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65   Synopsis: if ke
26ee0 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
26ef0 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
26f00 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
26f10 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
26f20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
26f30 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
26f40 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
26f50 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
26f60 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
26f70 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
26f80 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
26f90 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
26fa0 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
26fb0 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
26fc0 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
26fd0 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
26fe0 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
26ff0 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
27000 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
27010 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
27020 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
27030 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
27040 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
27050 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
27060 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
27070 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
27080 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
27090 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
270a0 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
270b0 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
270c0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
270d0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
270e0 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
270f0 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
27100 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
27110 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
27120 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
27130 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
27140 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
27150 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
27160 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
27170 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
27180 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27190 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
271a0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
271b0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
271c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
271d0 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
271e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
271f0 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
27200 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
27210 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
27220 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
27230 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
27240 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
27250 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
27260 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
27270 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
27280 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27290 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
272a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
272b0 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
272c0 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
272d0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
272e0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
272f0 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
27300 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
27310 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
27320 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
27330 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
27340 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
27350 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
27360 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
27370 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
27380 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
27390 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
273a0 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
273b0 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
273c0 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
273d0 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
273e0 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
273f0 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
27400 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
27410 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
27420 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
27430 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
27440 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
27450 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
27460 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
27470 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
27480 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
27490 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
274a0 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
274b0 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
274c0 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
274d0 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
274e0 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
274f0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
27500 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
27510 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
27520 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
27530 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
27540 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27550 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
27560 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
27570 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
27580 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
27590 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
275a0 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
275b0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
275c0 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
275d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
275e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
275f0 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29  or );.  if( rc )
27600 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27610 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61  to_error;.  p->a
27620 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
27630 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
27640 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
27650 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27660 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50   RowData P1 P2 P
27670 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
27680 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
27690 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
276a0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
276b0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74  omplete row cont
276c0 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20  ent for the row 
276d0 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72  at .** which cur
276e0 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e  sor P1 is curren
276f0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
27700 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
27710 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
27720 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
27730 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
27740 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
27750 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
27760 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
27770 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
27780 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  file..**.** If c
27790 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69  ursor P1 is an i
277a0 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63  ndex, then the c
277b0 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65  ontent is the ke
277c0 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a  y of the row..**
277d0 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73   If cursor P2 is
277e0 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74   a table, then t
277f0 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61  he content extra
27800 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61  cted is the data
27810 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
27820 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
27830 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
27840 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
27850 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
27860 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
27870 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
27880 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30  ..**.** If P3!=0
27890 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
278a0 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
278b0 6d 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72  make an ephermer
278c0 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e  al pointer.** in
278d0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
278e0 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  page.  That mean
278f0 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65  s that the conte
27900 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  nt of the output
27910 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c  .** register wil
27920 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  l be invalidated
27930 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
27940 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69  cursor moves - i
27950 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65  ncluding.** move
27960 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65  s caused by othe
27970 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22  r cursors that "
27980 73 61 76 65 22 20 74 68 65 20 74 68 65 20 63 75  save" the the cu
27990 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a  rrent cursors.**
279a0 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64   position in ord
279b0 65 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e  er that they can
279c0 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61   write to the sa
279d0 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33  me table.  If P3
279e0 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f  ==0.** then a co
279f0 70 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  py of the data i
27a00 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f  s made into memo
27a10 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61  ry.  P3!=0 is fa
27a20 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d  ster, but.** P3=
27a30 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a  =0 is safer..**.
27a40 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e  ** If P3!=0 then
27a50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
27a60 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
27a70 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f  is unsuitable fo
27a80 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52  r use.** in OP_R
27a90 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50  esult and any OP
27aa0 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76  _Result will inv
27ab0 61 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72  alidate the P2 r
27ac0 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e  egister content.
27ad0 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73  .** The P2 regis
27ae0 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69  ter content is i
27af0 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70  nvalidated by op
27b00 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75  codes like OP_Fu
27b10 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20  nction or.** by 
27b20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68  any use of anoth
27b30 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  er cursor pointi
27b40 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74  ng to the same t
27b50 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
27b60 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64  _RowData: {.  Vd
27b70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27b80 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
27b90 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75  .  u32 n;..  pOu
27ba0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
27bb0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61  se(p, pOp);..  a
27bc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27bd0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27be0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27bf0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27c00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27c10 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27c20 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27c30 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27c40 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
27c50 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
27c60 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
27c70 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
27c80 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
27c90 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
27ca0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
27cb0 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  r;..  /* The OP_
27cc0 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
27cd0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
27ce0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
27cf0 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  ** OP_SeekRowid 
27d00 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  or OP_Rewind/Op_
27d10 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
27d20 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
27d30 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20  tions.  ** that 
27d40 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
27d50 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a   the cursor..  *
27d60 2a 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20  * If this where 
27d70 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e  not the case, on
27d80 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
27d90 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a  g assert()s.  **
27da0 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68   would fail.  Sh
27db0 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63  ould this ever c
27dc0 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f  hange (because o
27dd0 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  f changes in the
27de0 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72   code.  ** gener
27df0 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66  ator) then the f
27e00 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69  ix would be to i
27e10 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a  nsert a call to.
27e20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
27e30 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a  CursorMoveto()..
27e40 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
27e50 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27e60 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
27e70 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
27e80 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
27e90 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20  r) );.#if 0  /* 
27ea0 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65  Not required due
27eb0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
27ec0 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61   to assert() sta
27ed0 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20  tements */.  rc 
27ee0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
27ef0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
27f00 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
27f10 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
27f20 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
27f30 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69  ndif..  n = sqli
27f40 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53  te3BtreePayloadS
27f50 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66  ize(pCrsr);.  if
27f60 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69  ( n>(u32)db->aLi
27f70 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
27f80 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
27f90 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
27fa0 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
27fb0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
27fc0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
27fd0 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e  tree(pCrsr, 0, n
27fe0 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72  , pOut);.  if( r
27ff0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28000 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
28010 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65  f( !pOp->p3 ) De
28020 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
28030 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
28040 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
28050 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
28060 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
28070 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
28080 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
28090 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
280a0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
280b0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
280c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
280d0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
280e0 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
280f0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
28100 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
28110 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
28120 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
28130 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
28140 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
28150 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
28160 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
28170 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
28180 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
28190 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
281a0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
281b0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
281c0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
281d0 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
281e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
281f0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
28200 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
28210 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28220 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
28230 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
28240 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
28250 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
28260 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  le;..  pOut = ou
28270 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
28280 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
28290 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
282a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
282b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
282c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
282d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
282e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
282f0 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
28300 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
28310 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
28320 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
28330 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
28340 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
28350 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
28360 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
28370 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
28380 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
28390 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
283a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
283b0 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
283c0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
283d0 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20  TYPE_VTAB ){.   
283e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
283f0 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  pVCur!=0 );.    
28400 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70  pVtab = pC->uc.p
28410 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  VCur->pVtab;.   
28420 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
28430 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
28440 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
28450 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63  xRowid );.    rc
28460 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
28470 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c  id(pC->uc.pVCur,
28480 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
28490 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
284a0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
284b0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
284c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
284d0 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  r;.#endif /* SQL
284e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
284f0 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
28500 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
28510 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
28520 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
28530 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
28540 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
28550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
28560 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
28570 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
28580 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28590 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
285a0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
285b0 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  {.      pOut->fl
285c0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
285d0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
285e0 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74   }.    v = sqlit
285f0 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
28600 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
28610 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  );.  }.  pOut->u
28620 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
28630 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
28640 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
28650 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
28660 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
28670 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
28680 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
28690 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
286a0 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
286b0 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
286c0 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
286d0 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
286e0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
286f0 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
28700 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
28710 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28720 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
28730 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
28740 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28750 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28760 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
28770 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
28780 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
28790 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
287a0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
287b0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
287c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
287d0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
287e0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
287f0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
28800 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
28810 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
28820 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64   Opcode: SeekEnd
28830 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
28840 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  * Position curso
28850 72 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20  r P1 at the end 
28860 6f 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72  of the btree for
28870 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a   the purpose of.
28880 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e  ** appending a n
28890 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68  ew entry onto th
288a0 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  e btree..**.** I
288b0 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
288c0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  t the cursor is 
288d0 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70  used only for ap
288e0 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a  pending and so.*
288f0 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  * if the cursor 
28900 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74  is valid, then t
28910 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61  he cursor must a
28920 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69  lready be pointi
28930 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64  ng.** at the end
28940 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e   of the btree an
28950 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20  d so no changes 
28960 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74  are made to.** t
28970 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a  he cursor..*/./*
28980 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
28990 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
289a0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
289b0 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
289c0 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74  umn or Prev inst
289d0 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
289e0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
289f0 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
28a00 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
28a10 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
28a20 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
28a30 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
28a40 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
28a50 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
28a60 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
28a70 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
28a80 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28a90 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
28aa0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
28ab0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
28ac0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
28ad0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
28ae0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
28af0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
28b00 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
28b10 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
28b20 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
28b30 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
28b40 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
28b50 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
28b60 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
28b70 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
28b80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e  /.case OP_SeekEn
28b90 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  d:.case OP_Last:
28ba0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
28bb0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
28bc0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
28bd0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
28be0 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
28bf0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
28c00 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
28c10 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
28c20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28c30 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
28c40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
28c50 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
28c60 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
28c70 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
28c80 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
28c90 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
28ca0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
28cb0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
28cc0 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
28cd0 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ode;.#endif.  if
28ce0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
28cf0 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20  P_SeekEnd ){.   
28d00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
28d10 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73  ==0 );.    pC->s
28d20 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a  eekResult = -1;.
28d30 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42      if( sqlite3B
28d40 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
28d50 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20  dNN(pCrsr) ){.  
28d60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
28d70 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
28d80 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
28d90 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
28da0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
28db0 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
28dc0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
28dd0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
28de0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
28df0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
28e00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
28e10 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  r;.  if( pOp->p2
28e20 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  >0 ){.    VdbeBr
28e30 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
28e40 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
28e50 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
28e60 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
28e70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28e80 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50  fSmaller P1 P2 P
28e90 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69  3 * *.**.** Esti
28ea0 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mate the number 
28eb0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
28ec0 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74  able P1.  Jump t
28ed0 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20  o P2 if that.** 
28ee0 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73  estimate is less
28ef0 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74   than approximat
28f00 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e  ely 2**(0.1*P3).
28f10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d  .*/.case OP_IfSm
28f20 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20  aller: {        
28f30 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
28f40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
28f50 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
28f60 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34    int res;.  i64
28f70 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20   sz;..  assert( 
28f80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
28f90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
28fa0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
28fb0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28fc0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
28fd0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
28fe0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
28ff0 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
29000 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29010 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
29020 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  es);.  if( rc ) 
29030 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
29040 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
29050 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20  es==0 ){.    sz 
29060 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f  = sqlite3BtreeRo
29070 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29  wCountEst(pCrsr)
29080 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53  ;.    if( ALWAYS
29090 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74  (sz>=0) && sqlit
290a0 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a  e3LogEst((u64)sz
290b0 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20  )<pOp->p3 ) res 
290c0 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  = 1;.  }.  VdbeB
290d0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
290e0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
290f0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
29100 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  2;.  break;.}...
29110 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
29120 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20  rSort P1 P2 * * 
29130 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c  *.**.** After al
29140 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62  l records have b
29150 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74  een inserted int
29160 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a  o the Sorter obj
29170 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65  ect.** identifie
29180 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20  d by P1, invoke 
29190 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61  this opcode to a
291a0 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73  ctually do the s
291b0 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20  orting..** Jump 
291c0 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61  to P2 if there a
291d0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f  re no records to
291e0 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a   be sorted..**.*
291f0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
29200 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50   an alias for OP
29210 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77  _Sort and OP_Rew
29220 69 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64  ind that is used
29230 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f  .** for Sorter o
29240 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  bjects..*/./* Op
29250 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
29260 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
29270 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
29280 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
29290 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
292a0 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
292b0 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
292c0 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
292d0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
292e0 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
292f0 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
29300 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
29310 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
29320 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
29330 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
29340 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
29350 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
29360 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
29370 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
29380 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
29390 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
293a0 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
293b0 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
293c0 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
293d0 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
293e0 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
293f0 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
29400 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
29410 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
29420 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
29430 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
29440 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
29450 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
29460 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
29470 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
29480 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
29490 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
294a0 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
294b0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
294c0 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
294d0 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
294e0 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
294f0 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
29500 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
29510 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
29520 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
29530 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
29540 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
29550 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
29560 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
29570 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
29580 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
29590 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
295a0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
295b0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
295c0 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
295d0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
295e0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
295f0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
29600 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
29610 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
29620 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
29630 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
29640 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
29650 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
29660 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
29670 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
29680 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
29690 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
296a0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
296b0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
296c0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
296d0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
296e0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
296f0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
29700 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
29710 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
29720 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
29730 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
29740 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
29750 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
29760 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
29770 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
29780 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
29790 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
297a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
297b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
297c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
297d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
297e0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
297f0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
29800 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
29810 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
29820 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
29830 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
29840 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
29850 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
29860 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
29870 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
29880 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
29890 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
298a0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
298b0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
298c0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
298d0 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
298e0 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  c.pCursor;.    a
298f0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
29900 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29910 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
29920 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
29930 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
29940 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
29950 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
29960 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
29970 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29980 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29990 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
299a0 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
299b0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
299c0 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
299d0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
299e0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
299f0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
29a00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
29a10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29a20 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
29a30 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
29a40 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
29a50 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
29a60 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
29a70 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
29a80 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
29a90 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
29aa0 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
29ab0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
29ac0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
29ad0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
29ae0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
29af0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
29b00 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
29b10 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
29b20 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
29b30 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
29b40 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
29b50 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
29b60 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
29b70 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
29b80 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
29b90 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
29ba0 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
29bb0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
29bc0 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
29bd0 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
29be0 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
29bf0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
29c00 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
29c10 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
29c20 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
29c30 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
29c40 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
29c50 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
29c60 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
29c70 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
29c80 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
29c90 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
29ca0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
29cb0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
29cc0 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
29cd0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
29ce0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
29cf0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
29d00 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
29d10 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
29d20 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
29d30 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
29d40 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
29d50 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
29d60 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
29d70 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
29d80 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
29d90 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
29da0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
29db0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
29dc0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
29dd0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
29de0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
29df0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
29e00 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
29e10 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
29e20 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
29e30 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
29e40 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
29e50 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
29e60 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
29e70 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
29e80 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
29e90 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
29ea0 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65  t like Next exce
29eb0 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
29ec0 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
29ed0 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
29ee0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
29ef0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
29f00 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
29f10 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
29f20 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
29f30 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
29f40 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
29f50 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
29f60 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
29f70 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
29f80 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
29f90 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
29fa0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
29fb0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
29fc0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
29fd0 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
29fe0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
29ff0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
2a000 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
2a010 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
2a020 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
2a030 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
2a040 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2a050 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
2a060 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
2a070 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
2a080 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
2a090 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
2a0a0 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
2a0b0 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
2a0c0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
2a0d0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
2a0e0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
2a0f0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
2a100 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
2a110 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
2a120 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
2a130 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
2a140 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
2a150 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2a160 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
2a170 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
2a180 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
2a190 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
2a1a0 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
2a1b0 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
2a1c0 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
2a1d0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
2a1e0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
2a1f0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
2a200 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
2a210 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
2a220 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
2a230 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
2a240 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
2a250 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
2a260 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
2a270 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
2a280 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
2a290 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
2a2a0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
2a2b0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
2a2c0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
2a2d0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
2a2e0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2a2f0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2a300 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2a310 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
2a320 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2a330 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
2a340 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76  s just like Prev
2a350 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
2a360 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
2a370 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
2a380 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
2a390 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
2a3a0 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  rNext P1 P2 * * 
2a3b0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
2a3c0 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
2a3d0 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63  like OP_Next exc
2a3e0 65 70 74 20 74 68 61 74 20 50 31 20 6d 75 73 74  ept that P1 must
2a3f0 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20   be a.** sorter 
2a400 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68  object for which
2a410 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f   the OP_SorterSo
2a420 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65  rt opcode has be
2a430 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20  en.** invoked.  
2a440 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61  This opcode adva
2a450 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  nces the cursor 
2a460 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74  to the next sort
2a470 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72  ed.** record, or
2a480 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20   jumps to P2 if 
2a490 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
2a4a0 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73  e sorted records
2a4b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2a4c0 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
2a4d0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2a4e0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d  sor *pC;..  pC =
2a4f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a500 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
2a510 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
2a520 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2a530 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
2a540 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  C);.  goto next_
2a550 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
2a560 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
2a570 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2a580 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
2a590 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
2a5a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a5b0 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
2a5c0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
2a5d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
2a5e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2a5f0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
2a600 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
2a610 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
2a620 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2a630 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2a640 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
2a650 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
2a660 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
2a670 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2a680 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2a690 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2a6a0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2a6b0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2a6c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2a6d0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2a6e0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2a6f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2a700 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
2a710 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
2a720 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
2a730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a740 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
2a750 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
2a760 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
2a770 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20  eePrevious );.  
2a780 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a790 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
2a7a0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
2a7b0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
2a7c0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
2a7d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2a7e0 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
2a7f0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
2a800 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
2a810 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20  eePrevious);..  
2a820 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  /* The Next opco
2a830 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
2a840 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65  after SeekGT, Se
2a850 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64  ekGE, and Rewind
2a860 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20  ..  ** The Prev 
2a870 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
2a880 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54  sed after SeekLT
2a890 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61  , SeekLE, and La
2a8a0 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  st. */.  assert(
2a8b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2a8c0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Next || pOp->op
2a8d0 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
2a8e0 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
2a8f0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2a900 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2a910 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2a920 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2a930 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2a940 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2a950 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28  ound);.  assert(
2a960 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2a970 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Prev || pOp->op
2a980 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
2a990 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
2a9a0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2a9b0 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kLT || pC->seekO
2a9c0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20  p==OP_SeekLE.   
2a9d0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2a9e0 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20  p==OP_Last );.. 
2a9f0 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
2aa00 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43  dvance(pC->uc.pC
2aa10 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b  ursor, pOp->p3);
2aa20 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
2aa30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2aa40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
2aa50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2aa60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b  c==SQLITE_OK,2);
2aa70 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2aa80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e  E_OK ){.    pC->
2aa90 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
2aaa0 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
2aab0 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
2aac0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
2aad0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
2aae0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
2aaf0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2ab00 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2ab10 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
2ab20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2ab30 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f  _DONE ) goto abo
2ab40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ab50 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  .  rc = SQLITE_O
2ab60 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  K;.  pC->nullRow
2ab70 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65   = 1;.  goto che
2ab80 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2ab90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2aba0 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
2abb0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2abc0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
2abd0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2abe0 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
2abf0 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
2ac00 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
2ac10 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
2ac20 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
2ac30 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
2ac40 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
2ac50 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
2ac60 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2ac70 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  l..**.** If P4 i
2ac80 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
2ac90 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65   it is the numbe
2aca0 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
2acb0 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b  he unpacked.** k
2acc0 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20  ey of reg(P2).  
2acd0 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33  In that case, P3
2ace0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2acf0 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73   the first regis
2ad00 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75  ter.** for the u
2ad10 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68  npacked key.  Th
2ad20 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f  e availability o
2ad30 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  f the unpacked k
2ad40 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  ey can sometimes
2ad50 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69  .** be an optimi
2ad60 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  zation..**.** If
2ad70 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
2ad80 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65  AG_APPEND bit se
2ad90 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e  t, that is a hin
2ada0 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
2adb0 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68  layer.** that th
2adc0 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  is insert is lik
2add0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
2ade0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
2adf0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2ae00 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
2ae10 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2ae20 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
2ae30 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2ae40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
2ae50 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
2ae60 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
2ae70 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
2ae80 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2ae90 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
2aea0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
2aeb0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2aec0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
2aed0 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
2aee0 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
2aef0 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
2af00 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
2af10 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
2af20 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
2af30 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
2af40 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2af50 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
2af60 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
2af70 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
2af80 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
2af90 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
2afa0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
2afb0 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
2afc0 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32  ivalent.** to P2
2afd0 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  . .**.** This in
2afe0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
2aff0 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
2b000 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
2b010 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
2b020 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
2b030 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  P_Insert..*/./* 
2b040 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e  Opcode: SorterIn
2b050 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  sert P1 P2 * * *
2b060 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2b070 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
2b080 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
2b090 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
2b0a0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
2b0b0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
2b0c0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
2b0d0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
2b0e0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
2b0f0 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20   the sorter P1. 
2b100 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2b110 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63  try is nil..*/.c
2b120 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
2b130 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
2b140 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
2b150 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
2b160 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2b170 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2b180 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a  treePayload x;..
2b190 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b1a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b1b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2b1c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2b1d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b1e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2b1f0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2b200 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
2b210 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2b220 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
2b230 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2b240 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
2b250 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
2b260 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
2b270 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
2b280 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
2b290 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2b2a0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2b2b0 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _BTREE || pOp->o
2b2c0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2b2d0 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65  Insert );.  asse
2b2e0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2b2f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
2b300 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
2b310 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2b320 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2b330 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  r;.  if( pOp->op
2b340 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2b350 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20  nsert ){.    rc 
2b360 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2b370 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e  terWrite(pC, pIn
2b380 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2);.  }else{.   
2b390 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.nKey = pIn2->
2b3a0 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20  n;.    x.pKey = 
2b3b0 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61  pIn2->z;.    x.a
2b3c0 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70  Mem = aMem + pOp
2b3d0 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d  ->p3;.    x.nMem
2b3e0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2b3f0 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
2b400 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
2b410 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2b420 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70  x,.         (pOp
2b430 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41  ->p5 & (OPFLAG_A
2b440 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56  PPEND|OPFLAG_SAV
2b450 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20  EPOSITION)), .  
2b460 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
2b470 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
2b480 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
2b490 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
2b4a0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73        );.    ass
2b4b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2b4c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2b4d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2b4e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2b4f0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67  .  }.  if( rc) g
2b500 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b510 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2b520 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2b530 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
2b540 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2b550 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a  s: key=r[P2@P3].
2b560 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
2b570 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
2b580 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
2b590 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
2b5a0 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
2b5b0 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
2b5c0 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
2b5d0 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
2b5e0 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
2b5f0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
2b600 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
2b610 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
2b620 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2b630 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2b640 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2b650 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2b660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2b670 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2b680 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
2b690 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  p2+pOp->p3<=(p->
2b6a0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
2b6b0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
2b6c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2b6d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2b6e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2b6f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2b700 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2b710 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b720 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2b730 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2b740 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2b750 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2b760 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
2b770 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2b780 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  =0 );.  r.pKeyIn
2b790 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2b7a0 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2b7b0 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
2b7c0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2b7d0 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
2b7e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72  em[pOp->p2];.  r
2b7f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2b800 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
2b810 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
2b820 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
2b830 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2b840 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2b850 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
2b860 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2b870 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54  Delete(pCrsr, BT
2b880 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a  REE_AUXDELETE);.
2b890 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2b8a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b8b0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rror;.  }.  asse
2b8c0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2b8d0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
2b8e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2b8f0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2b900 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
2b910 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
2b920 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72  /* Opcode: Defer
2b930 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20  redSeek P1 * P3 
2b940 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2b950 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e  : Move P3 to P1.
2b960 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a  rowid if needed.
2b970 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
2b980 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72  pen index cursor
2b990 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72   and P3 is a cur
2b9a0 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  sor on the corre
2b9b0 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c  sponding.** tabl
2b9c0 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2b9d0 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20  does a deferred 
2b9e0 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74  seek of the P3 t
2b9f0 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74  able cursor.** t
2ba00 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63  o the row that c
2ba10 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
2ba20 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
2ba30 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
2ba40 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  is a deferred se
2ba50 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
2ba60 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
2ba70 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
2ba80 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
2ba90 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
2baa0 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
2bab0 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
2bac0 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
2bad0 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50  happens..**.** P
2bae0 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61  4 may be an arra
2baf0 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74  y of integers (t
2bb00 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29  ype P4_INTARRAY)
2bb10 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f   containing.** o
2bb20 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
2bb30 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
2bb40 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72  P3 table.  If ar
2bb50 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a  ray entry a(i).*
2bb60 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  * is non-zero, t
2bb70 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2bb80 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63  mn a(i)-1 from c
2bb90 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20  ursor P3 is .** 
2bba0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65  equivalent to pe
2bbb0 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66  rforming the def
2bbc0 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74  erred seek and t
2bbd0 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2bbe0 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31  mn i .** from P1
2bbf0 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
2bc00 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
2bc10 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20   P3 and used to 
2bc20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64  redirect.** read
2bc30 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65  s against P3 ove
2bc40 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f  r to P1, thus po
2bc50 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20  ssibly avoiding 
2bc60 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73  the need to.** s
2bc70 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72  eek and read cur
2bc80 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70  sor P3..*/./* Op
2bc90 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
2bca0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2bcb0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2bcc0 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
2bcd0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
2bce0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
2bcf0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
2bd00 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
2bd10 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
2bd20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
2bd30 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
2bd40 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
2bd50 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
2bd60 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
2bd70 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
2bd80 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
2bd90 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
2bda0 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
2bdb0 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
2bdc0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
2bdd0 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a  P_DeferredSeek:.
2bde0 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2bdf0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2be00 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43   out2 */.  VdbeC
2be10 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
2be20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31         /* The P1
2be30 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
2be40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2be50 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f  TabCur;        /
2be60 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63  * The P2 table c
2be70 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72  ursor (OP_Deferr
2be80 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a  edSeek only) */.
2be90 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2beb0 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63   Rowid that P1 c
2bec0 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f  urrent points to
2bed0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2bee0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2bef0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2bf00 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2bf10 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2bf20 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2bf30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2bf40 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2bf50 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2bf60 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
2bf70 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2bf80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
2bf90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2bfa0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2bfb0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2bfc0 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c   !pC->nullRow ||
2bfd0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2bfe0 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20  _IdxRowid );..  
2bff0 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20  /* The IdxRowid 
2c000 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73  and Seek opcodes
2c010 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65   are combined be
2c020 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d  cause of the com
2c030 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66  monality.  ** of
2c040 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2c050 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20  orRestore() and 
2c060 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2c070 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d  wid(). */.  rc =
2c080 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2c090 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a  orRestore(pC);..
2c0a0 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
2c0b0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
2c0c0 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
2c0d0 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
2c0e0 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
2c0f0 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
2c100 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
2c110 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
2c120 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52  pens for an IdxR
2c130 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65  owid.  ** or See
2c140 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66  k opcode */.  if
2c150 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
2c160 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
2c170 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2c180 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
2c190 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
2c1a0 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
2c1b0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2c1c0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2c1d0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2c1e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2c1f0 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d  IdxRowid(db, pC-
2c200 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f  >uc.pCursor, &ro
2c210 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
2c220 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2c230 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
2c240 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c250 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
2c260 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65  >opcode==OP_Defe
2c270 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20  rredSeek ){.    
2c280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c290 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
2c2a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2c2b0 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d      pTabCur = p-
2c2c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
2c2d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c2e0 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  TabCur!=0 );.   
2c2f0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2c300 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
2c310 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2c320 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2c330 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  bCur->uc.pCursor
2c340 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2c350 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73  ert( pTabCur->is
2c360 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70  Table );.      p
2c370 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  TabCur->nullRow 
2c380 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43  = 0;.      pTabC
2c390 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  ur->movetoTarget
2c3a0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20   = rowid;.      
2c3b0 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65  pTabCur->deferre
2c3c0 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20  dMoveto = 1;.   
2c3d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c3e0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
2c3f0 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61  RAY || pOp->p4.a
2c400 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54  i==0 );.      pT
2c410 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d  abCur->aAltMap =
2c420 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20   pOp->p4.ai;.   
2c430 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74     pTabCur->pAlt
2c440 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20  Cursor = pC;.   
2c450 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f   }else{.      pO
2c460 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2c470 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
2c480 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
2c490 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  owid;.    }.  }e
2c4a0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2c4b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c4c0 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
2c4d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c4e0 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
2c4f0 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
2c500 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c510 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
2c520 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2c530 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2c540 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2c550 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2c560 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2c570 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2c580 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2c590 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2c5a0 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2c5b0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2c5c0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2c5d0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2c5e0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2c5f0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2c600 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2c610 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2c620 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2c630 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2c640 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2c650 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2c660 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2c670 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2c680 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2c690 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2c6a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2c6b0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2c6c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2c6d0 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
2c6e0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c6f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2c700 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2c710 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2c720 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2c730 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2c740 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2c750 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2c760 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2c770 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2c780 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2c790 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2c7a0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2c7b0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2c7c0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c7d0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2c7e0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2c7f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2c800 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2c810 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
2c820 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2c830 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2c840 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2c850 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c860 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2c870 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2c880 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
2c890 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2c8a0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2c8b0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2c8c0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2c8d0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2c8e0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2c8f0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2c900 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2c910 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2c920 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2c930 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2c940 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2c950 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2c960 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2c970 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2c980 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2c990 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2c9a0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2c9b0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2c9c0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
2c9d0 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2c9e0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
2c9f0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2ca00 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ca10 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ca20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2ca30 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
2ca40 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2ca50 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2ca60 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2ca70 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2ca80 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2ca90 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2caa0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2cab0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2cac0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2cad0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2cae0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2caf0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2cb00 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2cb10 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2cb20 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2cb30 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2cb40 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2cb50 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2cb60 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2cb70 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
2cb80 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2cb90 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2cba0 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
2cbb0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2cbc0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2cbd0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2cbe0 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
2cbf0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2cc00 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
2cc10 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2cc20 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
2cc30 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2cc40 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2cc50 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
2cc60 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2cc70 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2cc80 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2cc90 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2cca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2ccb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2ccc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2ccd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2cce0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2ccf0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2cd00 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
2cd10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2cd20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2cd30 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2cd40 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2cd50 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
2cd60 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2cd70 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2cd80 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2cd90 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
2cda0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2cdb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2cdc0 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
2cdd0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2cde0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2cdf0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2ce00 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2ce10 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
2ce20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2ce30 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2ce40 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2ce50 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2ce60 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
2ce70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2ce80 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2ce90 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2cea0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ceb0 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
2cec0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2ced0 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
2cee0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
2cef0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2cf00 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
2cf10 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
2cf20 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
2cf30 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
2cf40 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
2cf50 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2cf60 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2cf70 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2cf80 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2cf90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2cfa0 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2cfb0 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2cfc0 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2cfd0 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2cfe0 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2cff0 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2d000 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2d010 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2d020 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2d030 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2d040 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d050 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2d060 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2d070 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2d080 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2d090 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2d0a0 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2d0b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d0c0 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2d0d0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2d0e0 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2d0f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d100 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d110 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2d120 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2d130 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2d140 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2d150 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2d160 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2d170 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2d180 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2d190 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2d1a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2d1b0 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2d1c0 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2d1d0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2d1e0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2d1f0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2d200 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2d210 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2d220 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2d230 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2d240 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2d250 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2d260 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2d270 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2d280 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2d290 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2d2a0 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2d2b0 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2d2c0 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2d2d0 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2d2e0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2d2f0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2d300 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2d310 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2d320 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2d330 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2d340 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2d350 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2d360 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2d370 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2d380 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2d390 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2d3a0 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2d3b0 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2d3c0 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2d3d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49  n register P2. I
2d3e0 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65  f no page moveme
2d3f0 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
2d400 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20  (because the.** 
2d410 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
2d420 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
2d430 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
2d440 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
2d450 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73  en a .** zero is
2d460 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2d470 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f  ter P2.  If AUTO
2d480 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
2d490 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a  ed then a zero .
2d4a0 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
2d4b0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2d4c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2d4d0 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2d4e0 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
2d4f0 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d  active reader VM
2d500 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20  s when.** it is 
2d510 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73  invoked. This is
2d520 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74   done to avoid t
2d530 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73  he difficulty as
2d540 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a  sociated with .*
2d550 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74  * updating exist
2d560 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e  ing cursors when
2d570 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20   a root page is 
2d580 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f  moved in an AUTO
2d590 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62  VACUUM .** datab
2d5a0 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20  ase. This error 
2d5b0 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69  is thrown even i
2d5c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2d5d0 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43  s not an AUTOVAC
2d5e0 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72  UUM .** db in or
2d5f0 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74  der to avoid int
2d600 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f  roducing an inco
2d610 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77  mpatibility betw
2d620 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a  een autovacuum .
2d630 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76  ** and non-autov
2d640 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a  acuum modes..**.
2d650 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2d660 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2d670 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2d680 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2d690 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2d6a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2d6b0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2d6d0 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  1 );.  pOut = ou
2d6e0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2d6f0 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
2d700 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2d710 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52    if( db->nVdbeR
2d720 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74  ead > db->nVDest
2d730 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20  roy+1 ){.    rc 
2d740 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
2d750 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
2d760 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
2d770 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2d780 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2d790 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
2d7a0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
2d7b0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d7c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
2d7d0 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
2d7e0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2d7f0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
2d800 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2d810 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
2d820 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
2d830 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
2d840 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
2d850 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
2d860 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
2d870 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
2d880 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20  i = iMoved;.    
2d890 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d8a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d8b0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2d8c0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2d8d0 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21  .    if( iMoved!
2d8e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2d8f0 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2d900 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2d910 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2d920 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2d930 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2d940 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2d950 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2d960 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2d970 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2d980 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2d990 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2d9a0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2d9b0 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2d9c0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2d9d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d9e0 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2d9f0 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2da00 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2da10 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2da20 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2da30 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2da40 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2da50 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2da60 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2da70 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2da80 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2da90 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2daa0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2dab0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2dac0 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2dad0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2dae0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2daf0 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2db00 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2db10 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2db20 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2db30 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2db40 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2db50 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2db60 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2db70 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2db80 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2db90 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2dba0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2dbb0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2dbc0 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2dbd0 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2dbe0 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2dbf0 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2dc00 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2dc10 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2dc20 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2dc30 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2dc40 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2dc50 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2dc60 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2dc70 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2dc80 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2dc90 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2dca0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2dcb0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2dcc0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2dcd0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2dce0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2dcf0 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2dd00 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2dd10 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2dd20 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2dd30 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2dd40 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2dd50 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2dd60 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2dd70 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2dd80 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2dd90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2dda0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2ddb0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2ddc0 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2ddd0 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2dde0 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2ddf0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2de00 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2de10 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2de20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2de30 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2de40 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2de50 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2de60 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2de70 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2de80 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2de90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2dea0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2deb0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2dec0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2ded0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2dee0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2def0 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
2df00 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
2df10 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2df20 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
2df30 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
2df40 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
2df50 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
2df60 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
2df70 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
2df80 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
2df90 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
2dfa0 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
2dfb0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
2dfc0 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
2dfd0 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
2dfe0 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
2dff0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2e000 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
2e010 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2e020 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2e030 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2e040 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e050 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
2e060 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
2e070 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2e080 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
2e090 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
2e0a0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2e0b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2e0c0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2e0d0 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
2e0e0 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
2e0f0 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
2e100 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2e110 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
2e120 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2e130 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2e140 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e150 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
2e160 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e170 43 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50  CreateBtree P1 P
2e180 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2e190 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
2e1a0 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33   iDb=P1 flags=P3
2e1b0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
2e1c0 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20  a new b-tree in 
2e1d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2e1e0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
2e1f0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d  or in the.** TEM
2e200 50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  P database file 
2e210 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2e220 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2e230 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2e240 20 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74   The P3 argument
2e250 20 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45   must be 1 (BTRE
2e260 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20  E_INTKEY) for a 
2e270 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69  rowid table.** i
2e280 74 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52  t must be 2 (BTR
2e290 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20  EE_BLOBKEY) for 
2e2a0 61 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f  a index or WITHO
2e2b0 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a  UT ROWID table..
2e2c0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2e2d0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2e2e0 65 77 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f  ew b-tree is sto
2e2f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2e300 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  P2..*/.case OP_C
2e310 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20  reateBtree: {   
2e320 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2e330 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
2e340 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74  Db *pDb;..  pOut
2e350 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2e360 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e  e(p, pOp);.  pgn
2e370 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
2e380 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f   pOp->p3==BTREE_
2e390 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70  INTKEY || pOp->p
2e3a0 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  3==BTREE_BLOBKEY
2e3b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e3c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e3d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2e3e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2e3f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2e400 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2e410 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2e420 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2e430 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2e440 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e450 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2e460 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2e470 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2e480 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f  ->pBt, &pgno, pO
2e490 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63  p->p3);.  if( rc
2e4a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2e4b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
2e4c0 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2e4d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e4e0 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a  pcode: SqlExec *
2e4f0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e500 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74  Run the SQL stat
2e510 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65  ement or stateme
2e520 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e  nts specified in
2e530 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a   the P4 string..
2e540 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78  */.case OP_SqlEx
2e550 65 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53 71 6c  ec: {.  db->nSql
2e560 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73  Exec++;.  rc = s
2e570 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
2e580 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c  pOp->p4.z, 0, 0,
2e590 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45   0);.  db->nSqlE
2e5a0 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20  xec--;.  if( rc 
2e5b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2e5c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2e5d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e5e0 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
2e5f0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e600 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
2e610 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
2e620 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
2e630 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
2e640 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
2e650 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
2e660 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a  lause P4. .**.**
2e670 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2e680 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
2e690 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
2e6a0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
2e6b0 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
2e6c0 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
2e6d0 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
2e6e0 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
2e6f0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
2e700 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
2e710 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
2e720 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
2e730 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
2e740 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
2e750 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
2e760 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2e770 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
2e780 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
2e790 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
2e7a0 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
2e7b0 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
2e7c0 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
2e7d0 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
2e7e0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
2e7f0 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
2e800 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2e810 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
2e820 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
2e830 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
2e840 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
2e850 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
2e860 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
2e870 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
2e880 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
2e890 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
2e8a0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
2e8b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
2e8c0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
2e8d0 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
2e8e0 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65  ded) );.  /* Use
2e8f0 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74  d to be a condit
2e900 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a  ional */ {.    z
2e910 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f  Master = MASTER_
2e920 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61  NAME;.    initDa
2e930 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
2e940 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
2e950 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74  Op->p1;.    init
2e960 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
2e970 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
2e980 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zSql = sqlite3M
2e990 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20  Printf(db,.     
2e9a0 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
2e9b0 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
2e9c0 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
2e9d0 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
2e9e0 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e  id",.       db->
2e9f0 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  aDb[iDb].zDbSNam
2ea00 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
2ea10 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
2ea20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
2ea30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2ea40 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  EM_BKPT;.    }el
2ea50 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
2ea60 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
2ea70 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
2ea80 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
2ea90 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
2eaa0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2eab0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
2eac0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
2ead0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
2eae0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
2eaf0 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
2eb00 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
2eb10 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
2eb20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2eb30 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
2eb40 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
2eb50 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71  DbFreeNN(db, zSq
2eb60 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
2eb70 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
2eb80 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2eb90 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
2eba0 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
2ebb0 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
2ebc0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2ebd0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  E_NOMEM ){.     
2ebe0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2ebf0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f    }.    goto abo
2ec00 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ec10 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
2ec20 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
2ec30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2ec40 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
2ec50 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
2ec60 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
2ec70 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
2ec80 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
2ec90 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
2eca0 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
2ecb0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
2ecc0 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
2ecd0 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
2ece0 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
2ecf0 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
2ed00 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
2ed10 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
2ed20 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
2ed30 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
2ed40 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
2ed50 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
2ed60 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2ed70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
2ed80 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
2ed90 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
2eda0 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p1);.  if( rc )
2edb0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2edc0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2edd0 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;  .}.#endif /*
2ede0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2edf0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a  _OMIT_ANALYZE) *
2ee00 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  /../* Opcode: Dr
2ee10 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50  opTable P1 * * P
2ee20 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2ee30 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2ee40 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2ee50 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2ee60 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
2ee70 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e  able named P4 in
2ee80 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2ee90 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2eea0 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69  ter a table.** i
2eeb0 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2eec0 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2eed0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
2eee0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2eef0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
2ef00 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2ef10 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
2ef20 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
2ef30 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
2ef40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
2ef50 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
2ef60 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2ef70 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
2ef80 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2ef90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2efa0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
2efb0 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
2efc0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2efd0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2efe0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2eff0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2f000 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
2f010 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2f020 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2f030 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
2f040 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
2f050 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2f060 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2f070 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20  y opcode).** in 
2f080 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
2f090 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2f0a0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2f0b0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2f0c0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2f0d0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2f0e0 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78  ase OP_DropIndex
2f0f0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2f100 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
2f110 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  x(db, pOp->p1, p
2f120 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2f130 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2f140 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31  : DropTrigger P1
2f150 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2f160 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2f170 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2f180 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2f190 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2f1a0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
2f1b0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2f1c0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2f1d0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72  alled after a tr
2f1e0 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70  igger.** is drop
2f1f0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2f200 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2f210 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
2f220 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
2f230 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2f240 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2f250 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2f260 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2f270 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2f280 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
2f290 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
2f2a0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2f2b0 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
2f2c0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2f2d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2f2e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f2f0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
2f300 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
2f310 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
2f320 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61  P4 P5.**.** Do a
2f330 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
2f340 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
2f350 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
2f360 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
2f370 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
2f380 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
2f390 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
2f3a0 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
2f3b0 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
2f3c0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
2f3d0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
2f3e0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
2f3f0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2f400 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e  ns one less than
2f410 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2f420 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
2f430 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
2f440 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
2f450 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
2f460 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
2f470 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
2f480 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
2f490 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
2f4a0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
2f4b0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
2f4c0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
2f4d0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2f4e0 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
2f4f0 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2f500 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
2f510 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
2f520 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73  ase are integers
2f530 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34  .** stored in P4
2f540 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65  _INTARRAY argume
2f550 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nt..**.** If P5 
2f560 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2f570 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
2f580 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2f590 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
2f5a0 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
2f5b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2f5c0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2f5d0 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
2f5e0 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
2f5f0 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
2f600 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
2f610 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
2f620 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
2f630 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
2f640 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
2f650 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
2f660 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
2f670 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
2f680 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
2f690 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
2f6a0 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
2f6b0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
2f6c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2f6d0 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
2f6e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
2f6f0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2f700 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
2f710 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
2f720 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
2f730 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
2f740 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2f750 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
2f760 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
2f770 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
2f780 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  ->p2;.  aRoot = 
2f790 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73  pOp->p4.ai;.  as
2f7a0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2f7b0 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74  .  assert( aRoot
2f7c0 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20  [0]==nRoot );.  
2f7d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2f7e0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2f7f0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2f800 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
2f810 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
2f820 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
2f830 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
2f840 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
2f850 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2f860 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2f870 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
2f880 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2f890 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2f8a0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
2f8b0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2f8c0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2f8d0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2f8e0 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
2f8f0 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
2f900 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
2f910 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52  Op->p5].pBt, &aR
2f920 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20  oot[1], nRoot,. 
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f950 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b  (int)pnErr->u.i+
2f960 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  1, &nErr);.  sql
2f970 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2f980 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
2f990 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
2f9a0 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
2f9b0 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
2f9c0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
2f9d0 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
2f9e0 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
2f9f0 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74  Err-1;.    sqlit
2fa00 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
2fa10 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
2fa20 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
2fa30 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
2fa40 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2fa50 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
2fa60 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2fa70 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
2fa80 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2fa90 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2faa0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2fab0 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
2fac0 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
2fad0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2fae0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74  Synopsis: rowset
2faf0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2fb00 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2fb10 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2fb20 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2fb30 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  to a RowSet obje
2fb40 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ct.** held in re
2fb50 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2fb60 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2fb70 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2fb80 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2fb90 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2fba0 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2fbb0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2fbc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2fbd0 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2fbe0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2fbf0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2fc00 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2fc10 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2fc20 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2fc30 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2fc40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2fc50 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2fc60 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2fc70 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2fc80 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2fc90 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2fca0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2fcb0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2fcc0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2fcd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2fce0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2fcf0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2fd00 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73  psis: r[P3]=rows
2fd10 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2fd20 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2fd30 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  t value from the
2fd40 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2fd50 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20  n P1.** and put 
2fd60 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
2fd70 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
2fd80 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62  Or, if RowSet ob
2fd90 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69  ject P1 is initi
2fda0 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
2fdb0 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
2fdc0 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
2fdd0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
2fde0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
2fdf0 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
2fe00 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
2fe10 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
2fe20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2fe30 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
2fe40 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2fe50 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
2fe60 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
2fe70 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
2fe80 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
2fe90 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
2fea0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
2feb0 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
2fec0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2fed0 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64  ll(pIn1);.    Vd
2fee0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2fef0 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  2);.    goto jum
2ff00 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2ff10 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2ff20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
2ff30 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
2ff40 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
2ff50 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72  ex */.    VdbeBr
2ff60 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2ff70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ff80 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2ff90 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2ffa0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
2ffb0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2ffc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2ffd0 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
2ffe0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2fff0 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
30000 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
30010 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
30020 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
30030 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
30040 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
30050 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
30060 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
30070 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
30080 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
30090 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
300a0 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
300b0 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
300c0 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
300d0 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
300e0 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
300f0 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
30100 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
30110 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
30120 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
30130 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
30140 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
30150 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65  he case where se
30160 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a  ts of integers.*
30170 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69  * are inserted i
30180 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65  n distinct phase
30190 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65  s, which each se
301a0 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
301b0 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63  plicates..** Eac
301c0 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66  h set is identif
301d0 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
301e0 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
301f0 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
30200 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
30210 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68  final set must h
30220 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20  ave P4==-1, and 
30230 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65  for all other se
30240 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  ts.** must have 
30250 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4>0..**.** This
30260 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
30270 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
30280 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
30290 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
302a0 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * the RowSet obj
302b0 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
302c0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
302d0 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
302e0 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
302f0 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
30300 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
30310 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
30320 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
30330 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
30340 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
30350 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
30360 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
30370 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
30380 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
30390 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
303a0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
303b0 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
303c0 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
303d0 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
303e0 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
303f0 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
30400 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
30410 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
30420 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
30430 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
30440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
30450 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
30460 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
30470 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
30480 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
30490 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
304a0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
304b0 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
304c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
304d0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
304e0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
304f0 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
30500 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
30510 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
30520 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
30530 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
30540 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
30550 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
30560 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
30570 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
30580 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
30590 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
305a0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
305b0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
305c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
305d0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
305e0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
305f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
30600 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
30610 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
30620 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
30630 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
30640 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
30650 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
30660 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
30670 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
30680 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
30690 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
306a0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
306b0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
306c0 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
306d0 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
306e0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
306f0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
30700 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
30710 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
30720 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30730 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
30740 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
30750 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
30760 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
30770 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
30780 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
30790 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
307a0 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
307b0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
307c0 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
307d0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
307e0 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
307f0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
30800 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
30810 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
30820 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
30830 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
30840 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
30850 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
30860 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
30870 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
30880 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
30890 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
308a0 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
308b0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
308c0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
308d0 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
308e0 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
308f0 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
30900 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
30910 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
30920 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
30930 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
30940 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
30950 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
30960 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
30970 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
30980 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
30990 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
309a0 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  o, then recursiv
309b0 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61  e program invoca
309c0 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e  tion is enabled.
309d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
309e0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
309f0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
30a00 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
30a10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
30a20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
30a30 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
30a40 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
30a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30a60 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
30a70 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
30a80 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
30a90 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30ab0 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
30ac0 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
30ad0 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
30ae0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
30af0 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
30b00 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
30b10 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
30b20 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
30b30 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
30b40 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
30b50 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
30b60 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
30b70 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
30b80 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
30b90 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
30ba0 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
30bb0 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
30bc0 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
30bd0 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
30be0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
30bf0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
30c00 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
30c10 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
30c20 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
30c30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
30c40 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
30c50 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
30c60 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
30c70 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
30c80 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
30c90 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
30ca0 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
30cb0 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
30cc0 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
30cd0 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
30ce0 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
30cf0 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
30d00 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
30d10 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
30d20 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
30d30 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
30d40 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
30d50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
30d60 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
30d70 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
30d80 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
30d90 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
30da0 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
30db0 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
30dc0 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
30dd0 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
30de0 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
30df0 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
30e00 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
30e10 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
30e20 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
30e30 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
30e40 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
30e50 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
30e60 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
30e70 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
30e80 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
30e90 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
30ea0 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
30eb0 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
30ec0 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
30ed0 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
30ee0 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
30ef0 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
30f00 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
30f10 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
30f20 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
30f30 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
30f40 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
30f50 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
30f60 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
30f70 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
30f80 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
30f90 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
30fa0 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
30fb0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
30fc0 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
30fd0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
30fe0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
30ff0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
31000 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
31010 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
31020 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f  ursion");.    go
31030 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
31040 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
31050 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
31060 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
31070 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
31080 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
31090 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
310a0 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
310b0 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
310c0 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
310d0 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
310e0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
310f0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
31100 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
31110 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
31120 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
31130 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
31140 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
31150 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
31160 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
31170 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
31180 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
31190 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
311a0 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
311b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
311c0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
311d0 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
311e0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
311f0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
31200 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
31210 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
31220 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
31230 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
31240 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
31250 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
31260 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
31270 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
31280 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
31290 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
312a0 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
312b0 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
312c0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
312d0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
312e0 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30    assert( nMem>0
312f0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f   );.    if( pPro
31300 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20  gram->nCsr==0 ) 
31310 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74  nMem++;.    nByt
31320 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
31330 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
31340 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
31350 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
31360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
31370 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
31380 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
31390 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
313a0 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d      + (pProgram-
313b0 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20  >nOp + 7)/8;.   
313c0 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
313d0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
313e0 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
313f0 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
31400 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
31410 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
31420 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
31430 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
31440 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
31450 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
31460 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
31470 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
31480 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
31490 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
314a0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
314b0 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
314c0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
314d0 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70  me->pc = (int)(p
314e0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70  Op - aOp);.    p
314f0 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
31500 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
31510 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
31520 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
31530 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
31540 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
31550 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
31560 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
31570 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
31580 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
31590 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
315a0 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
315b0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64  ram->token;.#ifd
315c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
315d0 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
315e0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45  .    pFrame->anE
315f0 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b  xec = p->anExec;
31600 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
31610 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
31620 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
31630 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
31640 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
31650 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
31660 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
31670 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
31680 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
31690 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
316a0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
316b0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
316c0 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
316d0 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
316e0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
316f0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
31700 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
31710 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
31720 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
31730 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
31740 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
31750 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
31760 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
31770 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
31780 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
31790 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
317a0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
317b0 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
317c0 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
317d0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
317e0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
317f0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
31800 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
31810 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
31820 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
31830 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
31840 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
31850 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
31860 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
31870 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
31880 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
31890 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
318a0 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
318b0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
318c0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
318d0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
318e0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
318f0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
31900 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
31910 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
31920 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
31930 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
31940 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
31950 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
31960 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
31970 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f  m];.  pFrame->aO
31980 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61  nce = (u8*)&p->a
31990 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e  pCsr[pProgram->n
319a0 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  Csr];.  memset(p
319b0 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c  Frame->aOnce, 0,
319c0 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20   (pProgram->nOp 
319d0 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f  + 7)/8);.  p->aO
319e0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
319f0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
31a00 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
31a10 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  p;.#ifdef SQLITE
31a20 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
31a30 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
31a40 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
31a50 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d    pOp = &aOp[-1]
31a60 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
31a70 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
31a80 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
31a90 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
31aa0 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
31ab0 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
31ac0 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
31ad0 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
31ae0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
31af0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
31b00 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
31b10 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
31b20 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
31b30 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
31b40 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
31b50 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
31b60 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
31b70 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
31b80 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
31b90 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
31ba0 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
31bb0 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
31bc0 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
31bd0 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
31be0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
31bf0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
31c00 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
31c10 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
31c20 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
31c30 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
31c40 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
31c50 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
31c60 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
31c70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
31c80 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
31c90 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
31ca0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
31cb0 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f    Mem *pIn;.  pO
31cc0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
31cd0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
31ce0 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
31cf0 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
31d00 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
31d10 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
31d20 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
31d30 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
31d40 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
31d50 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
31d60 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
31d70 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
31d80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31d90 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
31da0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31db0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
31dc0 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
31dd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31de0 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
31df0 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
31e00 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
31e10 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
31e20 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
31e30 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
31e40 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
31e50 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
31e60 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
31e70 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
31e80 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
31e90 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
31ea0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
31eb0 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
31ec0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
31ed0 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
31ee0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
31ef0 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
31f00 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
31f10 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
31f20 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
31f30 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
31f40 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
31f50 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
31f60 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
31f70 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
31f80 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
31f90 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
31fa0 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
31fb0 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
31fc0 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
31fd0 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
31fe0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31ff0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
32000 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
32010 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
32020 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
32030 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
32040 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
32050 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
32060 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
32070 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
32080 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
32090 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
320a0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
320b0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
320c0 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
320d0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
320e0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
320f0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
32100 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
32110 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
32120 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
32130 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
32140 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
32150 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
32160 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
32170 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
32180 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
32190 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
321a0 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
321b0 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
321c0 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
321d0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
321e0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
321f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
32200 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
32210 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
32220 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
32230 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
32240 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
32250 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
32260 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
32270 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
32280 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
32290 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
322a0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
322b0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
322c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
322d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
322e0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
322f0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
32300 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
32310 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
32320 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
32330 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
32340 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
32350 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
32360 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32370 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
32380 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
32390 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
323a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
323b0 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
323c0 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
323d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
323e0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
323f0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
32400 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
32410 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
32420 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
32430 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
32440 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
32450 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
32460 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
32470 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
32480 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
32490 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
324a0 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
324b0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
324c0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
324d0 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
324e0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
324f0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
32500 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
32510 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
32520 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
32530 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
32540 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
32550 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
32560 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
32570 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
32580 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
32590 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
325a0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
325b0 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
325c0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
325d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
325e0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
325f0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
32600 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
32610 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
32620 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
32630 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32640 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
32650 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
32660 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
32670 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
32680 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
32690 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
326a0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
326b0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
326c0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
326d0 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
326e0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
326f0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
32700 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32710 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
32720 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
32730 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
32740 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
32750 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
32760 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
32770 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
32780 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
32790 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
327a0 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
327b0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
327c0 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
327d0 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20  er, subtract P3 
327e0 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75  from the.** valu
327f0 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70  e in P1 and jump
32800 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
32810 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   the initial val
32820 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
32830 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  1 is less than 1
32840 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
32850 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  lue is unchanged
32860 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73   and control pas
32870 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  ses through to t
32880 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
32890 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
328a0 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20  IfPos: {        
328b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
328c0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
328d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
328e0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
328f0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
32900 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e  BranchTaken( pIn
32910 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20  1->u.i>0, 2);.  
32920 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
32930 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
32940 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
32950 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
32960 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32970 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66  ../* Opcode: Off
32980 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50  setLimit P1 P2 P
32990 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
329a0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
329b0 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d  en r[P2]=r[P1]+m
329c0 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65  ax(0,r[P3]) else
329d0 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a   r[P2]=(-1).**.*
329e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65  * This opcode pe
329f0 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c  rforms a commonl
32a00 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69  y used computati
32a10 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
32a20 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20  th.** LIMIT and 
32a30 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20  OFFSET process. 
32a40 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65   r[P1] holds the
32a50 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20   limit counter. 
32a60 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20   r[P3].** holds 
32a70 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  the offset count
32a80 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20  er.  The opcode 
32a90 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d  computes the com
32aa0 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f  bined value.** o
32ab0 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  f the LIMIT and 
32ac0 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65  OFFSET and store
32ad0 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20  s that value in 
32ae0 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32  r[P2].  The r[P2
32af0 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75  ].** value compu
32b00 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ted is the total
32b10 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
32b20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74  that will need t
32b30 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20  o be.** visited 
32b40 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70  in order to comp
32b50 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a  lete the query..
32b60 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69  **.** If r[P3] i
32b70 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
32b80 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
32b90 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45  here is no OFFSE
32ba0 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
32bb0 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
32bc0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
32bd0 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a  IT, r[P1]..**.**
32be0 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72   if r[P1] is zer
32bf0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
32c00 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
32c10 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61  is no LIMIT.** a
32c20 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
32c30 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74  to -1. .**.** Ot
32c40 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69  herwise, r[P2] i
32c50 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d  s set to the sum
32c60 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b   of r[P1] and r[
32c70 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3]..*/.case OP_
32c80 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20  OffsetLimit: {  
32c90 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20    /* in1, out2, 
32ca0 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a  in3 */.  i64 x;.
32cb0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
32cc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
32cd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
32ce0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
32cf0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
32d00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
32d10 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
32d20 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
32d30 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
32d40 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70  M_Int );.  x = p
32d50 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  In1->u.i;.  if( 
32d60 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41  x<=0 || sqlite3A
32d70 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33  ddInt64(&x, pIn3
32d80 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e  ->u.i>0?pIn3->u.
32d90 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49  i:0) ){.    /* I
32da0 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c  f the LIMIT is l
32db0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
32dc0 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20  l to zero, loop 
32dd0 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20  forever.  This. 
32de0 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e     ** is documen
32df0 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20  ted.  But also, 
32e00 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46  if the LIMIT+OFF
32e10 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36 33  SET exceeds 2^63
32e20 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73   then.    ** als
32e30 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  o loop forever. 
32e40 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d   This is undocum
32e50 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c  ented.  In fact,
32e60 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65   one could argue
32e70 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
32e80 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72   loop should ter
32e90 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73  minate.  But ass
32ea0 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20  uming 1 billion 
32eb0 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a  iterations.    *
32ec0 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61  * per second (fa
32ed0 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20  r exceeding the 
32ee0 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20  capabilities of 
32ef0 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72 64  any current hard
32f00 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20  ware).    ** it 
32f10 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c  would take nearl
32f20 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20 61  y 300 years to a
32f30 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68  ctually reach th
32f40 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20  e limit.  So.   
32f50 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65   ** looping fore
32f60 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61  ver is a reasona
32f70 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ble approximatio
32f80 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e  n. */.    pOut->
32f90 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73  u.i = -1;.  }els
32fa0 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
32fb0 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = x;.  }.  brea
32fc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
32fd0 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
32fe0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
32ff0 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20  is: if r[P1]!=0 
33000 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f  then r[P1]--, go
33010 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
33020 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
33030 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
33040 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
33050 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
33060 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  is.** initially 
33070 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
33080 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e  o, then decremen
33090 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
330a0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49  egister P1..** I
330b0 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f it is non-zero
330c0 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f   (negative or po
330d0 73 69 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e  sitive) and then
330e0 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32   also jump to P2
330f0 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .  .** If regist
33100 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
33110 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69  ly zero, leave i
33120 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  t unchanged and 
33130 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f  fall through..*/
33140 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65  .case OP_IfNotZe
33150 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
33160 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
33170 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
33180 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
33190 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
331a0 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
331b0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
331c0 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
331d0 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20  pIn1->u.i ){.   
331e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
331f0 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  0 ) pIn1->u.i--;
33200 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  .     goto jump_
33210 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
33220 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33230 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50  : DecrJumpZero P
33240 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
33250 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b  nopsis: if (--r[
33260 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  P1])==0 goto P2.
33270 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
33280 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69  1 must hold an i
33290 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65  nteger.  Decreme
332a0 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nt the value in 
332b0 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74  P1.** and jump t
332c0 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20  o P2 if the new 
332d0 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79  value is exactly
332e0 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
332f0 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20  P_DecrJumpZero: 
33300 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  {      /* jump, 
33310 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
33320 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
33330 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
33340 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
33350 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
33360 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  >SMALLEST_INT64 
33370 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20  ) pIn1->u.i--;. 
33380 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33390 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
333a0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
333b0 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  .i==0 ) goto jum
333c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
333d0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
333e0 20 41 67 67 53 74 65 70 30 20 2a 20 50 32 20 50   AggStep0 * P2 P
333f0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
33400 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
33410 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
33420 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
33430 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
33440 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
33450 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
33460 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
33470 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
33480 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
33490 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
334a0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
334b0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
334c0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
334d0 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
334e0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
334f0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
33500 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
33510 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
33520 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
33530 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
33540 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  ep * P2 P3 P4 P5
33550 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
33560 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
33570 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
33580 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
33590 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
335a0 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
335b0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
335c0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
335d0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
335e0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
335f0 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20  ntext.** object 
33600 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
33610 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  run the function
33620 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
33630 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75  s.** as the accu
33640 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
33650 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
33660 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
33670 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
33680 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
33690 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
336a0 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79  ode is initially
336b0 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67   coded as OP_Agg
336c0 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74  Step0.  On first
336d0 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20   evaluation,.** 
336e0 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72  the FuncDef stor
336f0 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76  ed in P4 is conv
33700 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
33710 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e  lite3_context an
33720 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20  d.** the opcode 
33730 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20  is changed.  In 
33740 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
33750 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  itialization of 
33760 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
33770 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70  ontext only happ
33780 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61  ens once, instea
33790 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c  d of on each cal
337a0 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70  l to the.** step
337b0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61   function..*/.ca
337c0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20  se OP_AggStep0: 
337d0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c  {.  int n;.  sql
337e0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
337f0 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
33800 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
33810 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20  UNCDEF );.  n = 
33820 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
33830 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
33840 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
33850 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
33860 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
33870 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
33880 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
33890 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
338a0 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
338b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
338c0 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
338d0 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
338e0 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
338f0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
33900 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c  db, n*sizeof(sql
33910 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20  ite3_value*) +. 
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
33930 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b  izeof(pCtx[0]) +
33940 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73   sizeof(Mem) - s
33950 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
33960 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70  lue*)));.  if( p
33970 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Ctx==0 ) goto no
33980 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d  _mem;.  pCtx->pM
33990 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e  em = 0;.  pCtx->
339a0 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70  pOut = (Mem*)&(p
339b0 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20  Ctx->argv[n]);. 
339c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
339d0 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20  nit(pCtx->pOut, 
339e0 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  db, MEM_Null);. 
339f0 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
33a00 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
33a10 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
33a20 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
33a30 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
33a40 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  .  pCtx->skipFla
33a50 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69  g = 0;.  pCtx->i
33a60 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43  sError = 0;.  pC
33a70 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20  tx->argc = n;.  
33a80 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
33a90 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d  _FUNCCTX;.  pOp-
33aa0 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b  >p4.pCtx = pCtx;
33ab0 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
33ac0 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f   OP_AggStep;.  /
33ad0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
33ae0 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a  nto OP_AggStep *
33af0 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  /.}.case OP_AggS
33b00 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  tep: {.  int i;.
33b10 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
33b20 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a  t *pCtx;.  Mem *
33b30 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28  pMem;..  assert(
33b40 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
33b50 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
33b60 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
33b70 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  x;.  pMem = &aMe
33b80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f  m[pOp->p3];..  /
33b90 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
33ba0 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
33bb0 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
33bc0 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
33bd0 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
33be0 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
33bf0 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
33c00 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
33c10 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
33c20 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
33c30 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
33c40 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
33c50 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
33c60 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
33c70 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
33c80 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
33c90 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
33ca0 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69  xt object */.  i
33cb0 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d  f( pCtx->pMem !=
33cc0 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74   pMem ){.    pCt
33cd0 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a  x->pMem = pMem;.
33ce0 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
33cf0 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
33d00 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
33d10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
33d20 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  +i];.  }..#ifdef
33d30 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
33d40 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
33d50 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
33d60 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
33d70 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
33d80 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
33d90 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
33da0 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
33db0 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]);.  }.#endif..
33dc0 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61    pMem->n++;.  a
33dd0 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75  ssert( pCtx->pOu
33de0 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
33df0 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ll );.  assert( 
33e00 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30  pCtx->isError==0
33e10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
33e20 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20  tx->skipFlag==0 
33e30 29 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e  );.  (pCtx->pFun
33e40 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c  c->xSFunc)(pCtx,
33e50 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
33e60 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20  >argv); /* IMP: 
33e70 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
33e80 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45  .  if( pCtx->isE
33e90 72 72 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20  rror ){.    if( 
33ea0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20  pCtx->isError>0 
33eb0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
33ec0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
33ed0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
33ee0 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74  _text(pCtx->pOut
33ef0 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70  ));.      rc = p
33f00 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20  Ctx->isError;.  
33f10 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78    }.    if( pCtx
33f20 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  ->skipFlag ){.  
33f30 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
33f40 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
33f50 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20  ollSeq );.      
33f60 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
33f70 20 20 20 20 20 20 69 66 28 20 69 20 29 20 73 71        if( i ) sq
33f80 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
33f90 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
33fa0 29 3b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73  );.      pCtx->s
33fb0 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20  kipFlag = 0;.   
33fc0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
33fd0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74  beMemRelease(pCt
33fe0 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43  x->pOut);.    pC
33ff0 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20  tx->pOut->flags 
34000 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
34010 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
34020 30 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  0;.    if( rc ) 
34030 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34040 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
34050 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75  ssert( pCtx->pOu
34060 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
34070 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ll );.  assert( 
34080 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d  pCtx->skipFlag==
34090 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
340a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
340b0 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
340c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
340d0 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
340e0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
340f0 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
34100 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
34110 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a  egate.  P1 is.**
34120 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
34130 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
34140 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
34150 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a   the aggregate..
34160 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
34170 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
34180 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
34190 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
341a0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
341b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
341c0 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
341d0 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
341e0 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
341f0 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
34200 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
34210 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
34220 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
34230 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
34240 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
34250 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
34260 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
34270 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
34280 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
34290 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20  degenerate case 
342a0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
342b0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
342c0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
342d0 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
342e0 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d  _AggFinal: {.  M
342f0 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65  em *pMem;.  asse
34300 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
34310 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
34320 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
34330 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
34340 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34350 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
34360 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
34370 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
34380 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
34390 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
343a0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
343b0 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
343c0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
343d0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
343e0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
343f0 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20  ext(pMem));.    
34400 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34410 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  o_error;.  }.  s
34420 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
34430 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
34440 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
34450 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
34460 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
34470 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
34480 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
34490 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
344a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
344b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
344c0 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
344d0 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
344e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
344f0 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
34500 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
34510 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
34520 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
34530 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
34540 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
34550 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
34560 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
34570 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
34580 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
34590 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
345a0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
345b0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
345c0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
345d0 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
345e0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
345f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
34600 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
34610 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
34620 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
34630 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
34640 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
34650 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
34660 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
34670 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
34680 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
34690 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
346a0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
346b0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
346c0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
346d0 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
346e0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
346f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
34700 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
34710 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
34720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
34730 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
34740 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
34770 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
347a0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
347b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
347c0 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
347d0 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
347e0 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
347f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
34800 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
34810 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
34820 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
34830 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
34840 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
34850 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
34860 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
34870 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
34880 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
34890 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
348a0 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
348b0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
348c0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
348d0 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
348e0 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
348f0 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
34900 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c!=SQLITE_BUSY )
34910 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
34920 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63  to_error;.    rc
34930 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
34940 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
34950 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
34960 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
34970 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
34980 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
34990 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
349a0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
349b0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
349c0 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
349d0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
349e0 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
349f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
34a00 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
34a10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67   * *.**.** Chang
34a20 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e the journal mo
34a30 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  de of database P
34a40 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74  1 to P3. P3 must
34a50 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a   be one of the.*
34a60 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  * PAGER_JOURNALM
34a70 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20  ODE_XXX values. 
34a80 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77  If changing betw
34a90 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20  een the various 
34aa0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65  rollback.** mode
34ab0 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63  s (delete, trunc
34ac0 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66  ate, persist, of
34ad0 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74  f and memory), t
34ae0 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a  his is a simple.
34af0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f  ** operation. No
34b00 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e   IO is required.
34b10 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69  .**.** If changi
34b20 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f  ng into or out o
34b30 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70  f WAL mode the p
34b40 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65  rocedure is more
34b50 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a   complicated..**
34b60 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69  .** Write a stri
34b70 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
34b80 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d  e final journal-
34b90 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72  mode to register
34ba0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
34bb0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20  JournalMode: {  
34bc0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42    /* out2 */.  B
34bd0 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34bf0 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
34c00 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
34c10 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
34c20 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
34c30 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
34c40 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
34c50 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
34c60 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
34c70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
34c80 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
34c90 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cb0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
34cc0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
34cd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34ce0 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
34cf0 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
34d00 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
34d10 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
34d20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
34d30 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ndif..  pOut = o
34d40 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
34d50 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20   pOp);.  eNew = 
34d60 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
34d70 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  t( eNew==PAGER_J
34d80 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54  OURNALMODE_DELET
34d90 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
34da0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34db0 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20  MODE_TRUNCATE . 
34dc0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34dd0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34de0 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20  _PERSIST .      
34df0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34e00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a  JOURNALMODE_OFF.
34e10 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
34e20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34e30 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20  E_MEMORY.       
34e40 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34e50 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
34e60 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34e70 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34e80 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73  _QUERY.  );.  as
34e90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
34ea0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
34eb0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
34ec0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
34ed0 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  );..  pBt = db->
34ee0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
34ef0 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c  ;.  pPager = sql
34f00 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
34f10 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71  Bt);.  eOld = sq
34f20 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75  lite3PagerGetJou
34f30 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
34f40 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  ;.  if( eNew==PA
34f50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34f60 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65  QUERY ) eNew = e
34f70 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  Old;.  if( !sqli
34f80 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e  te3PagerOkToChan
34f90 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  geJournalMode(pP
34fa0 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65  ager) ) eNew = e
34fb0 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  Old;..#ifndef SQ
34fc0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
34fd0 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69  zFilename = sqli
34fe0 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65  te3PagerFilename
34ff0 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20  (pPager, 1);..  
35000 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
35010 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20  a transition to 
35020 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c  journal_mode=WAL
35030 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a   for a database.
35040 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72    ** in temporar
35050 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20  y storage or if 
35060 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74  the VFS does not
35070 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20   support shared 
35080 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69  memory .  */.  i
35090 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
350a0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20  OURNALMODE_WAL. 
350b0 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72    && (sqlite3Str
350c0 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
350d0 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ==0           /*
350e0 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20   Temp file */.  
350f0 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33       || !sqlite3
35100 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65  PagerWalSupporte
35110 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20  d(pPager))   /* 
35120 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79  No shared-memory
35130 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b   support */.  ){
35140 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
35150 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e  ;.  }..  if( (eN
35160 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20  ew!=eOld).   && 
35170 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eOld==PAGER_JOU
35180 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20  RNALMODE_WAL || 
35190 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
351a0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29  NALMODE_WAL).  )
351b0 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61  {.    if( !db->a
351c0 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d  utoCommit || db-
351d0 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a  >nVdbeRead>1 ){.
351e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
351f0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73  E_ERROR;.      s
35200 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
35210 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  p,.          "ca
35220 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
35230 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
35240 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
35250 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
35260 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
35270 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
35280 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
35290 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67        );.      g
352a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
352b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
352c0 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65  e{. .      if( e
352d0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
352e0 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20  ALMODE_WAL ){.  
352f0 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76        /* If leav
35300 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c  ing WAL mode, cl
35310 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ose the log file
35320 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  . If successful,
35330 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20   the call.      
35340 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f    ** to PagerClo
35350 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69  seWal() checkpoi
35360 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  nts and deletes 
35370 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
35380 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  log .        ** 
35390 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49  file. An EXCLUSI
353a0 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c  VE lock may stil
353b0 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65  l be held on the
353c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a   database file .
353d0 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72          ** after
353e0 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65   a successful re
353f0 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a  turn. .        *
35400 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  /.        rc = s
35410 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65  qlite3PagerClose
35420 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b  Wal(pPager, db);
35430 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
35440 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
35450 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
35460 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
35470 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
35480 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
35490 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
354a0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
354b0 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
354c0 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
354d0 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
354e0 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
354f0 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
35500 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
35510 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
35520 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
35530 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
35540 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
35550 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
35560 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
35570 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
35580 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
35590 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
355a0 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
355b0 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
355c0 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
355d0 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
355e0 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
355f0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
35600 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
35610 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
35620 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
35630 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
35640 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
35650 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
35660 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
35670 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
35680 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
35690 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
356a0 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
356b0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
356c0 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
356d0 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
356e0 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f  ( rc ) eNew = eO
356f0 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c  ld;.  eNew = sql
35700 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
35710 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
35720 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e  eNew);..  pOut->
35730 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
35740 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
35750 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
35760 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
35770 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
35780 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
35790 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
357a0 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
357b0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
357c0 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
357d0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
357e0 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
357f0 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ng);.  if( rc ) 
35800 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35810 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
35820 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
35830 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
35840 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
35850 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
35860 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
35870 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
35880 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
35890 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20  : Vacuum P1 * * 
358a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
358b0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
358c0 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73 20  base P1.  P1 is 
358d0 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e  0 for "main", an
358e0 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66  d 2 or more.** f
358f0 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  or an attached d
35900 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22 74  atabase.  The "t
35910 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d 61  emp" database ma
35920 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65  y not be vacuume
35930 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  d..*/.case OP_Va
35940 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
35950 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
35960 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
35970 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
35980 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70  zErrMsg, db, pOp
35990 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
359a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
359b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
359c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
359d0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
359e0 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
359f0 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
35a00 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
35a10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
35a20 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
35a30 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
35a40 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
35a50 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
35a60 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
35a70 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
35a80 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
35a90 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
35aa0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
35ab0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
35ac0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
35ad0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
35ae0 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
35af0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
35b00 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
35b10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
35b20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
35b30 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
35b40 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
35b50 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
35b60 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
35b70 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
35b80 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
35b90 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
35ba0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
35bb0 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
35bc0 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
35bd0 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
35be0 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
35bf0 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
35c00 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
35c10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35c20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
35c30 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
35c40 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
35c50 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
35c60 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
35c70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20  code: Expire P1 
35c80 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61  * * * *.**.** Ca
35c90 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  use precompiled 
35ca0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78  statements to ex
35cb0 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65  pire.  When an e
35cc0 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
35cd0 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20  .** is executed 
35ce0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74  using sqlite3_st
35cf0 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74  ep() it will eit
35d00 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  her automaticall
35d10 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69  y.** reprepare i
35d20 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73  tself (if it was
35d30 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61   originally crea
35d40 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
35d50 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a  3_prepare_v2()).
35d60 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61  ** or it will fa
35d70 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53  il with SQLITE_S
35d80 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  CHEMA..** .** If
35d90 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
35da0 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
35db0 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
35dc0 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
35dd0 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
35de0 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
35df0 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
35e00 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a  ent is expired..
35e10 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
35e20 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
35e30 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
35e40 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
35e50 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
35e60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
35e70 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
35e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
35e90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35ea0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
35eb0 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
35ec0 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
35ed0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44  .** Synopsis: iD
35ee0 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69  b=P1 root=P2 wri
35ef0 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61  te=P3.**.** Obta
35f00 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
35f10 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
35f20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
35f30 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
35f40 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
35f50 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
35f60 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
35f70 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
35f80 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
35f90 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
35fa0 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
35fb0 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
35fc0 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
35fd0 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
35fe0 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
35ff0 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
36000 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
36010 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
36020 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
36030 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
36040 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
36050 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
36060 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
36070 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
36080 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
36090 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
360a0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
360b0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
360c0 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
360d0 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
360e0 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
360f0 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
36100 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
36110 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
36120 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
36130 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
36140 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 29 20 29  _ReadUncommit) )
36150 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
36160 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
36170 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
36180 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
36190 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
361a0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
361b0 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65   p1) );.    asse
361c0 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
361d0 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
361e0 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
361f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
36200 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
36210 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
36220 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
36230 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
36240 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
36250 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
36260 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
36270 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
36280 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73 71  p4.z;.        sq
36290 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
362a0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
362b0 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
362c0 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , z);.      }.  
362d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
362e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
362f0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
36300 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36310 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
36320 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
36330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36340 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36350 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
36360 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
36370 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
36380 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
36390 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
363a0 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
363b0 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
363c0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
363d0 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
363e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
363f0 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
36400 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
36410 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
36420 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
36430 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
36440 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
36450 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
36460 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
36470 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
36480 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
36490 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
364a0 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
364b0 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
364c0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
364d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
364e0 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
364f0 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
36500 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d   ) sqlite3VtabIm
36510 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
36520 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69  Tab->pVtab);.  i
36530 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
36540 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36550 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
36560 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36570 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36580 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
36590 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
365a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
365b0 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a  Create P1 P2 * *
365c0 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61   *.**.** P2 is a
365d0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68   register that h
365e0 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
365f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
36600 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a   in database .**
36610 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
36620 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72  reate method for
36630 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
36640 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a  case OP_VCreate:
36650 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20   {.  Mem sMem;  
36660 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
36670 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
36680 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
36690 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
366a0 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20  *zTab;  /* Name 
366b0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
366c0 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65  able */..  memse
366d0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
366e0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65  of(sMem));.  sMe
366f0 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20  m.db = db;.  /* 
36700 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c  Because P2 is al
36710 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74  ways a static st
36720 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f  ring, it is impo
36730 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20  ssible for the. 
36740 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
36750 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c  emCopy() to fail
36760 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61   */.  assert( (a
36770 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
36780 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30  gs & MEM_Str)!=0
36790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61   );.  assert( (a
367a0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
367b0 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29  gs & MEM_Static)
367c0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
367d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
367e0 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  (&sMem, &aMem[pO
367f0 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72  p->p2]);.  asser
36800 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
36810 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f   );.  zTab = (co
36820 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
36830 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d  3_value_text(&sM
36840 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  em);.  assert( z
36850 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Tab || db->mallo
36860 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28  cFailed );.  if(
36870 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20   zTab ){.    rc 
36880 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
36890 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
368a0 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a  >p1, zTab, &p->z
368b0 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73  ErrMsg);.  }.  s
368c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
368d0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69  ease(&sMem);.  i
368e0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
368f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36900 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
36910 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36920 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36930 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
36940 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36950 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
36960 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50  Destroy P1 * * P
36970 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
36980 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
36990 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
369a0 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c  atabase P1.  Cal
369b0 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d  l the xDestroy m
369c0 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74  ethod.** of that
369d0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
369e0 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20  OP_VDestroy: {. 
369f0 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b   db->nVDestroy++
36a00 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
36a10 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
36a20 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
36a30 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e  ->p4.z);.  db->n
36a40 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66  VDestroy--;.  if
36a50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36a60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36a70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36a80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36a90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36aa0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36ab0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36ac0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f  LE./* Opcode: VO
36ad0 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  pen P1 * * P4 *.
36ae0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
36af0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
36b00 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
36b10 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
36b20 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50   structure..** P
36b30 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75  1 is a cursor nu
36b40 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f  mber.  This opco
36b50 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f  de opens a curso
36b60 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  r to the virtual
36b70 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74  .** table and st
36b80 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72  ores that cursor
36b90 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20   in P1..*/.case 
36ba0 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  OP_VOpen: {.  Vd
36bb0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
36bc0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
36bd0 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20  ursor *pVCur;.  
36be0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
36bf0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
36c00 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
36c10 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
36c20 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
36c30 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
36c40 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  VCur = 0;.  pVta
36c50 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
36c60 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20  b->pVtab;.  if( 
36c70 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45  pVtab==0 || NEVE
36c80 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  R(pVtab->pModule
36c90 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  ==0) ){.    rc =
36ca0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
36cb0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
36cc0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
36cd0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
36ce0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72  ab->pModule;.  r
36cf0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
36d00 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75 72  en(pVtab, &pVCur
36d10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36d20 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36d30 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
36d40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36d50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
36d60 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
36d70 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
36d80 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
36d90 20 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d 20   pVCur->pVtab = 
36da0 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69  pVtab;..  /* Ini
36db0 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
36dc0 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
36dd0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
36de0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
36df0 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  , 0, -1, CURTYPE
36e00 5f 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70 43  _VTAB);.  if( pC
36e10 75 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e  ur ){.    pCur->
36e20 75 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72  uc.pVCur = pVCur
36e30 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65  ;.    pVtab->nRe
36e40 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  f++;.  }else{.  
36e50 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61    assert( db->ma
36e60 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
36e70 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
36e80 65 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67 6f  e(pVCur);.    go
36e90 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
36ea0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36eb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
36ec0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
36ed0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36ee0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36ef0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
36f00 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
36f10 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36f20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61  iplan=r[P3] zpla
36f30 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20  n='P4'.**.** P1 
36f40 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
36f50 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
36f60 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
36f70 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
36f80 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
36f90 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
36fa0 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
36fb0 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
36fc0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
36fd0 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
36fe0 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
36ff0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
37000 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
37010 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
37020 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
37030 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
37040 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
37050 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
37060 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
37070 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
37080 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
37090 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
370a0 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
370b0 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
370c0 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
370d0 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
370e0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
370f0 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
37100 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
37110 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
37120 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
37130 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
37140 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
37150 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
37160 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
37170 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
37180 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
37190 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
371a0 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
371b0 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
371c0 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
371d0 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
371e0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
371f0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
37200 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
37210 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
37220 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
37230 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
37240 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
37250 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
37260 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
37270 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
37280 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
37290 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
372a0 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
372b0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
372c0 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65  *pVCur;.  sqlite
372d0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
372e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
372f0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
37300 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
37310 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
37320 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
37330 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
37340 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
37350 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
37360 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
37370 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
37380 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
37390 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
373a0 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
373b0 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d   pCur->eCurType=
373c0 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
373d0 0a 20 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d  .  pVCur = pCur-
373e0 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74  >uc.pVCur;.  pVt
373f0 61 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61  ab = pVCur->pVta
37400 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
37410 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
37420 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
37430 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
37440 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
37450 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
37460 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
37470 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
37480 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
37490 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74  );.  nArg = (int
374a0 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69  )pArgc->u.i;.  i
374b0 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75  Query = (int)pQu
374c0 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
374d0 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
374e0 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72  er method */.  r
374f0 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20  es = 0;.  apArg 
37500 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f  = p->apArg;.  fo
37510 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
37520 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67   i++){.    apArg
37530 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
37540 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d  ];.  }.  rc = pM
37550 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
37560 56 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  VCur, iQuery, pO
37570 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
37580 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  pArg);.  sqlite3
37590 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
375a0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
375b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
375c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
375d0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
375e0 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20 20  >xEof(pVCur);.  
375f0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
37600 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
37610 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
37620 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
37630 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
37640 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
37650 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
37660 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
37670 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37680 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
37690 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
376a0 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  mn P1 P2 P3 * P5
376b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
376c0 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a  P3]=vcolumn(P2).
376d0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
376e0 65 67 69 73 74 65 72 20 50 33 20 74 68 65 20 76  egister P3 the v
376f0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
37700 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
37710 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f  he current row o
37720 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
37730 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
37740 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 56  ..**.** If the V
37750 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 69 73  Column opcode is
37760 20 62 65 69 6e 67 20 75 73 65 64 20 74 6f 20 66   being used to f
37770 65 74 63 68 20 74 68 65 20 76 61 6c 75 65 20 6f  etch the value o
37780 66 0a 2a 2a 20 61 6e 20 75 6e 63 68 61 6e 67 69  f.** an unchangi
37790 6e 67 20 63 6f 6c 75 6d 6e 20 64 75 72 69 6e 67  ng column during
377a0 20 61 6e 20 55 50 44 41 54 45 20 6f 70 65 72 61   an UPDATE opera
377b0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 50  tion, then the P
377c0 35 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 31 2e  5.** value is 1.
377d0 20 20 4f 74 68 65 72 77 69 73 65 2c 20 50 35 20    Otherwise, P5 
377e0 69 73 20 30 2e 20 20 54 68 65 20 50 35 20 76 61  is 0.  The P5 va
377f0 6c 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 0a  lue is returned.
37800 2a 2a 20 62 79 20 73 71 6c 69 74 65 33 5f 76 74  ** by sqlite3_vt
37810 61 62 5f 6e 6f 63 68 61 6e 67 65 28 29 20 72 6f  ab_nochange() ro
37820 75 74 69 6e 65 20 63 61 6e 20 63 61 6e 20 62 65  utine can can be
37830 20 75 73 65 64 0a 2a 2a 20 62 79 20 76 69 72 74   used.** by virt
37840 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
37850 65 6e 74 61 74 69 6f 6e 73 20 74 6f 20 72 65 74  entations to ret
37860 75 72 6e 20 73 70 65 63 69 61 6c 20 22 6e 6f 2d  urn special "no-
37870 63 68 61 6e 67 65 22 0a 2a 2a 20 6d 61 72 6b 73  change".** marks
37880 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d 6f   which can be mo
37890 72 65 20 65 66 66 69 63 69 65 6e 74 2c 20 64 65  re efficient, de
378a0 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76  pending on the v
378b0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2f  irtual table..*/
378c0 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
378d0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
378e0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
378f0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
37900 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
37910 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
37920 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
37930 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
37940 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
37950 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
37960 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
37970 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
37980 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
37990 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
379a0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
379b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
379c0 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
379d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
379e0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
379f0 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69  e(p, pDest);.  i
37a00 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
37a10 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
37a20 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
37a30 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  est);.    break;
37a40 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
37a50 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
37a60 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
37a70 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
37a90 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
37aa0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
37ab0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
37ac0 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e  ontext));.  sCon
37ad0 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73  text.pOut = pDes
37ae0 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  t;.  if( pOp->p5
37af0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
37b00 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
37b10 65 73 74 29 3b 0a 20 20 20 20 70 44 65 73 74 2d  est);.    pDest-
37b20 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
37b30 6c 7c 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20  l|MEM_Zero;.    
37b40 70 44 65 73 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d  pDest->u.nZero =
37b50 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
37b60 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
37b70 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
37b80 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f  ;.  }.  rc = pMo
37b90 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
37ba0 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73  ur->uc.pVCur, &s
37bb0 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
37bc0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
37bd0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
37be0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
37bf0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3e 30  ontext.isError>0
37c00 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
37c10 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
37c20 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
37c30 74 65 78 74 28 70 44 65 73 74 29 29 3b 0a 20 20  text(pDest));.  
37c40 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
37c50 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
37c60 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
37c70 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
37c80 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
37c90 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
37ca0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
37cb0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
37cc0 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
37cd0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
37ce0 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
37cf0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
37d00 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  g;.  }.  if( rc 
37d10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
37d20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
37d30 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
37d40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
37d50 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
37d60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
37d70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
37d80 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
37d90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
37da0 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
37db0 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
37dc0 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
37dd0 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
37de0 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
37df0 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
37e00 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
37e10 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
37e20 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
37e30 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
37e40 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
37e50 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
37e60 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
37e70 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
37e80 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
37e90 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
37ea0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
37eb0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
37ec0 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  e;.  int res;.  
37ed0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
37ee0 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  ;..  res = 0;.  
37ef0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
37f00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
37f10 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
37f20 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
37f30 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
37f40 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
37f50 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
37f60 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  b = pCur->uc.pVC
37f70 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ur->pVtab;.  pMo
37f80 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
37f90 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
37fa0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
37fb0 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
37fc0 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
37fd0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
37fe0 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
37ff0 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
38000 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
38010 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
38020 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
38030 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
38040 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
38050 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
38060 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
38070 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
38080 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
38090 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
380a0 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
380b0 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
380c0 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
380d0 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
380e0 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
380f0 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
38100 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
38110 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
38120 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
38130 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e  >xNext(pCur->uc.
38140 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
38150 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
38160 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
38170 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
38180 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
38190 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
381a0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e  ->xEof(pCur->uc.
381b0 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72  pVCur);.  VdbeBr
381c0 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
381d0 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
381e0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
381f0 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
38200 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  o P2 */.    goto
38210 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
38220 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
38230 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  upt;.  }.  goto 
38240 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
38250 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
38260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
38270 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
38280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
38290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
382a0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
382b0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
382c0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
382d0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
382e0 20 74 61 62 6c 65 20 6f 6