/ Hex Artifact Content
Login

Artifact 9f43973c08d115f5fbe46fe30663e536018d7b43:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 7c 7c 20 28 28 70 2d 3e 72 63 26 30  USY || ((p->rc&0
4770: 78 46 46 29 20 3d 3d 20 53 51 4c 49 54 45 5f 4c  xFF) == SQLITE_L
4780: 4f 43 4b 45 44 29 29 3b 0a 20 20 61 73 73 65 72  OCKED));.  asser
4790: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
47a0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
47b0: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
47c0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
47d0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
47e0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
47f0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4800: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4810: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4820: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4830: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4840: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4850: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4860: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4870: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4880: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4890: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
48a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
48b0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
48c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
48d0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
48e0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
48f0: 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67  ssLimit = (unsig
4900: 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ned)p->aCounter[
4910: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
4920: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
4930: 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d  if( nProgressLim
4940: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e  it==0 ){.      n
4950: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4960: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4970: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4980: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4990: 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64  t %= (unsigned)d
49a0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
49b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
49c0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
49d0: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
49e0: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
49f0: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4a00: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
4a10: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
4a20: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
4a30: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
4a40: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
4a50: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
4a60: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
4a70: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
4a80: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4a90: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4aa0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4ab0: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
4ac0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4ad0: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4ae0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
4af0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4b00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4b10: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4b20: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4b30: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
4b40: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4b50: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4b60: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
4b70: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4b80: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4b90: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
4ba0: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
4bb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4bc0: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
4bd0: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
4be0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
4bf0: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
4c00: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
4c10: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
4c20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4c30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4c40: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4c50: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
4c60: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
4c70: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
4c80: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4c90: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4ca0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d  ndif.  for(pc=p-
4cb0: 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  >pc; rc==SQLITE_
4cc0: 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61  OK; pc++){.    a
4cd0: 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20  ssert( pc>=0 && 
4ce0: 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20  pc<p->nOp );.   
4cf0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4d00: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
4d10: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
4d20: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
4d30: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4d40: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4d50: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20   nVmStep++;.    
4d60: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a  pOp = &aOp[pc];.
4d70: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4d80: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
4d90: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
4da0: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
4db0: 65 63 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66  ec[pc]++;.#endif
4dc0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
4dd0: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
4de0: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
4df0: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
4e00: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4e10: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
4e20: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4e30: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
4e40: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e50: 74 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20  tOp(stdout, pc, 
4e60: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
4e70: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4e80: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4e90: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4ea0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4eb0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4ec0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4ed0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ee0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
4ef0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4f00: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
4f10: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4f20: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
4f30: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4f40: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
4f50: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4f60: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4f70: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
4f80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f90: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
4fa0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
4fb0: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
4fc0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
4fd0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
4fe0: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
4ff0: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
5000: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
5010: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
5020: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
5030: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
5040: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
5050: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
5060: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
5070: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
5080: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
5090: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
50a0: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
50b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
50c0: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
50d0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
50e0: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
50f0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5100: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5110: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5120: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5130: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5140: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5150: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5160: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  or) );.      pOu
5170: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5180: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
5190: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
51a0: 75 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56  ut);.      if( V
51b0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
51c0: 75 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62  ut) ) sqlite3Vdb
51d0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
51e0: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
51f0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
5200: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61      }..    /* Sa
5210: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
5220: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
5230: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5240: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
5250: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5260: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
5270: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5280: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5290: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
52a0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
52b0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
52c0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
52d0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
52e0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
52f0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5300: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5310: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
5320: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5330: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5340: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5350: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5360: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5370: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5380: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5390: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
53a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
53b0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
53c0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
53d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
53e0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
53f0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p2]) );.      a
5400: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5410: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5420: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5430: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
5440: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5450: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5460: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5470: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5480: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
5490: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
54a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
54b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
54c0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
54d0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
54e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
54f0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5500: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5510: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5520: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5530: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5540: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5550: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5560: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5570: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
5580: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5590: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
55a0: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
55b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
55c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
55d0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
55e0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
55f0: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5600: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5610: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5620: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5630: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5640: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5650: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5660: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5680: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5690: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
56a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
56b0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
56c0: 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
56d0: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
56e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
56f0: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5720: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
5740: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
5750: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
5760: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
5770: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
5780: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
5790: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
57a0: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
57b0: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
57c0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
57d0: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
57e0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
57f0: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5800: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5810: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
5820: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
5830: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
5840: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
5850: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
5860: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
5870: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
5880: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
5890: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
58a0: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
58b0: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
58c0: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
58d0: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
58e0: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
58f0: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5900: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5910: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
5920: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
5930: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
5940: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
5950: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
5960: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
5970: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
5980: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
5990: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
59a0: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
59b0: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
59c0: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
59d0: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
59e0: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
59f0: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5a00: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5a10: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5a20: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5a30: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5a40: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5a50: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5a60: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5a70: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
5a80: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
5a90: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
5aa0: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
5ab0: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
5ac0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5ad0: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5ae0: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5af0: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5b00: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5b10: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5b20: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5b30: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5b40: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5b50: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5b60: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5b70: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5b80: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5b90: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5ba0: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5bb0: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5bc0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5bd0: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5be0: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5bf0: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5c00: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5c10: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5c20: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5c30: 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75  2_prerelease, ou
5c40: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
5c50: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
5c60: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
5c70: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5c80: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
5c90: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
5ca0: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
5cb0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
5cc0: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
5cd0: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
5ce0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
5cf0: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
5d00: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
5d10: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
5d20: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
5d30: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
5d40: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
5d50: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
5d60: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
5d70: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
5d80: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
5d90: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
5da0: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
5db0: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
5dc0: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
5dd0: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
5de0: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
5df0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
5e00: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e50: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
5e60: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
5e70: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
5e80: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
5e90: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
5ea0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5eb0: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
5ec0: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
5ed0: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
5ee0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
5ef0: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
5f00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
5f10: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
5f20: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
5f30: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
5f40: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
5f50: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
5f60: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
5f70: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
5f80: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
5f90: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
5fa0: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
5fb0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
5fc0: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
5fd0: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
5fe0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
5ff0: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
6000: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
6010: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
6020: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6040: 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70  mp */.  pc = pOp
6050: 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20  ->p2 - 1;..  /* 
6060: 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65  Opcodes that are
6070: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74   used as the bot
6080: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f  tom of a loop (O
6090: 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c  P_Next, OP_Prev,
60a0: 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20  .  ** OP_VNext, 
60b0: 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f  OP_RowSetNext, o
60c0: 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29  r OP_SorterNext)
60d0: 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75   all jump here u
60e0: 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74  pon.  ** complet
60f0: 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73  ion.  Check to s
6100: 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ee if sqlite3_in
6110: 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65  terrupt() has be
6120: 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f  en called.  ** o
6130: 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73  r if the progres
6140: 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73  s callback needs
6150: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20   to be invoked. 
6160: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20  .  **.  ** This 
6170: 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75  code uses unstru
6180: 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74  ctured "goto" st
6190: 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65  atements and doe
61a0: 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e  s not look clean
61b0: 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20  ..  ** But that 
61c0: 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c  is not due to sl
61d0: 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69  oppy coding habi
61e0: 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20  ts. The code is 
61f0: 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a  written this.  *
6200: 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72  * way for perfor
6210: 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20  mance, to avoid 
6220: 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68  having to run th
6230: 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20  e interrupt and 
6240: 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68  progress.  ** ch
6250: 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70  ecks on every op
6260: 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70  code.  This help
6270: 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  s sqlite3_step()
6280: 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e   to run about 1.
6290: 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61  5%.  ** faster a
62a0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c  ccording to "val
62b0: 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63  grind --tool=cac
62c0: 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63  hegrind" */.chec
62d0: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
62e0: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
62f0: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
6300: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6310: 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64  interrupt;.#ifnd
6320: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
6330: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
6340: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
6350: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6360: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
6370: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
6380: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
6390: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
63a0: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
63b0: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
63c0: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
63d0: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
63e0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
63f0: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6400: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6410: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
6420: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
6430: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
6440: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
6450: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
6460: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
6470: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
6480: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
6490: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
64a0: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
64b0: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
64c0: 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65  imit ){.    asse
64d0: 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  rt( db->nProgres
64e0: 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e  sOps!=0 );.    n
64f0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
6500: 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50  nVmStep + db->nP
6510: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56  rogressOps - (nV
6520: 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72  mStep%db->nProgr
6530: 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28  essOps);.    if(
6540: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
6550: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
6560: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
6570: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
6580: 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
6590: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
65a0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
65b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
65c0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
65d0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
65e0: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
65f0: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6600: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6610: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6620: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6630: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6650: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6660: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6670: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
6680: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6690: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
66a0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
66b0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
66c0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
66d0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
66e0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
66f0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6700: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6710: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6720: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6730: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  n1);.  pc = pOp-
6740: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6750: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6760: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
6770: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
6780: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6790: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
67a0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
67b0: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
67c0: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
67d0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
67e0: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
67f0: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6810: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6820: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6830: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6840: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
6850: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6860: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  >u.i;.  pIn1->fl
6870: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
6880: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
6890: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
68a0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20  Coroutine P1 P2 
68b0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  P3 * *.**.** Set
68c0: 20 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20   up register P1 
68d0: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
68e0: 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72  Yield to the cor
68f0: 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65  outine.** locate
6900: 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e  d at address P3.
6910: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20  .**.** If P2!=0 
6920: 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69  then the corouti
6930: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ne implementatio
6940: 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  n immediately fo
6950: 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70  llows.** this op
6960: 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f  code.  So jump o
6970: 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  ver the coroutin
6980: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6990: 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50   to.** address P
69a0: 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
69b0: 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a  o: EndCoroutine.
69c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43  */.case OP_InitC
69d0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
69e0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
69f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6a00: 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  &  pOp->p1<=(p->
6a10: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6a20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6a30: 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p2>=0 && pOp-
6a40: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6a50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6a60: 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d  =0 && pOp->p3<p-
6a70: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d  >nOp );.  pOut =
6a80: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6a90: 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65  .  assert( !Vdbe
6aa0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
6ab0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
6ac0: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
6ad0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
6ae0: 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f  EM_Int;.  if( pO
6af0: 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70  p->p2 ) pc = pOp
6b00: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6b10: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b20: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6b30: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6b40: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6b50: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6b60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6b70: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6b80: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6b90: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6ba0: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6bb0: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6bc0: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6bd0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6be0: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6bf0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6c00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6c10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6c20: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6c30: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
6c40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6c70: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6c80: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
6c90: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
6ca0: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
6cb0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
6cc0: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
6cd0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
6ce0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
6cf0: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
6d00: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
6d10: 4f 70 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61  Op );.  pc = pCa
6d20: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20  ller->p2 - 1;.  
6d30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6d40: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6d50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6d60: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32  de:  Yield P1 P2
6d70: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6d80: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6d90: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6da0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6db0: 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61   P1.  This.** ha
6dc0: 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  s the effect of 
6dd0: 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f  yielding to a co
6de0: 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  routine..**.** I
6df0: 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  f the coroutine 
6e00: 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64  that is launched
6e10: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
6e20: 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a  tion ends with.*
6e30: 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72  * Yield or Retur
6e40: 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20  n then continue 
6e50: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
6e60: 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
6e70: 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  .** the coroutin
6e80: 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68  e launched by th
6e90: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  is instruction e
6ea0: 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43  nds with.** EndC
6eb0: 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a  oroutine, then j
6ec0: 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72  ump to P2 rather
6ed0: 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67   than continuing
6ee0: 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78   with the.** nex
6ef0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
6f00: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6f10: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6f20: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
6f40: 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e  n1, jump */.  in
6f50: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
6f60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6f70: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6f80: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6f90: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6fa0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6fb0: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6fc0: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6fd0: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6fe0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6ff0: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
7000: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
7010: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7020: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
7030: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
7040: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
7050: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
7060: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
7070: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7080: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
7090: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
70a0: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
70b0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
70c0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
70d0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
70e0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
70f0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7100: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7110: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7120: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7130: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
7140: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
7150: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
7160: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
7170: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
7180: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
7190: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
71a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
71b0: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
71c0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
71d0: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
71e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
71f0: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7200: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7210: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7220: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7230: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
7240: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
7250: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
7260: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
7270: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
7280: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
7290: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
72a0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
72b0: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
72c0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
72d0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
72e0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
72f0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7300: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7310: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7320: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7330: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
7340: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
7350: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
7360: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
7370: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
7380: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
7390: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
73a0: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
73b0: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
73c0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
73d0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
73e0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
73f0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7400: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7410: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7420: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7430: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
7440: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
7450: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
7460: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
7470: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
7480: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
7490: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
74a0: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
74b0: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
74c0: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
74d0: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
74e0: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
74f0: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7500: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7510: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7520: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7530: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
7540: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7550: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
7560: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
7570: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7580: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
7590: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
75a0: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
75b0: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
75c0: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
75d0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
75e0: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
75f0: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7600: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7610: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7620: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7630: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
7640: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
7650: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7660: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
7670: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
7680: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
7690: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
76a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
76b0: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
76c0: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66   *zLogFmt;..  if
76d0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
76e0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
76f0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7700: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7710: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7720: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7730: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
7740: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
7750: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7760: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7770: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
7780: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
7790: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
77a0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
77b0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
77c0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
77d0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
77e0: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
77f0: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7800: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7810: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
7820: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
7830: 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f  tion pc is the O
7840: 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69  P_Program that i
7850: 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70  nvoked the sub-p
7860: 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a  rogram .      **
7870: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
7880: 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20   halted. If the 
7890: 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  p2 instruction o
78a0: 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20  f this OP_Halt. 
78b0: 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74       ** instruct
78c0: 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45  ion is set to OE
78d0: 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68  _Ignore, then th
78e0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  e sub-program is
78f0: 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20   throwing.      
7900: 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63  ** an IGNORE exc
7910: 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20  eption. In this 
7920: 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65  case jump to the
7930: 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69   address specifi
7940: 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74  ed.      ** as t
7950: 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c  he p2 of the cal
7960: 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e  ling OP_Program.
7970: 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20    */.      pc = 
7980: 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b  p->aOp[pc].p2-1;
7990: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
79a0: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
79b0: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
79c0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d   break;.  }.  p-
79d0: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
79e0: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
79f0: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
7a00: 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69   p->pc = pc;.  i
7a10: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7a20: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
7a30: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
7a40: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
7a50: 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54  zType[] = { "NOT
7a60: 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22   NULL", "UNIQUE"
7a70: 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20  , "CHECK",.     
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7aa0: 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e          "FOREIGN
7ab0: 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61   KEY" };.      a
7ac0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d  ssert( pOp->p5>=
7ad0: 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  1 && pOp->p5<=4 
7ae0: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7af0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
7b00: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7b10: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
7b20: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7b30: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
7b40: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b50: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
7b60: 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b   zType = azType[
7b70: 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20  pOp->p5-1];.    
7b80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79  }else{.      zTy
7b90: 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  pe = 0;.    }.  
7ba0: 20 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21    assert( zType!
7bb0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21  =0 || pOp->p4.z!
7bc0: 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d  =0 );.    zLogFm
7bd0: 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64  t = "abort at %d
7be0: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20   in [%s]: %s";. 
7bf0: 20 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20     if( zType && 
7c00: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
7c10: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
7c20: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
7c30: 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61   db, "%s constra
7c40: 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c  int failed: %s",
7c50: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7c60: 20 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20           zType, 
7c70: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7c80: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
7c90: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7ca0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
7cb0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
7cc0: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
7cd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7ce0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7cf0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7d00: 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  db, "%s constrai
7d10: 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70  nt failed", zTyp
7d20: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  e);.    }.    sq
7d30: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
7d40: 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20  1, zLogFmt, pc, 
7d50: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
7d60: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
7d70: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
7d80: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
7d90: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
7da0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
7db0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
7dc0: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
7dd0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
7de0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
7df0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
7e00: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
7e10: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7e20: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
7e30: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7e40: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7e50: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7e60: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7e70: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
7e80: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
7e90: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
7ea0: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
7eb0: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
7ec0: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
7ed0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
7ee0: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
7ef0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
7f00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
7f10: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
7f20: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7f30: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
7f40: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7f50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7f60: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7f70: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7f80: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7f90: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7fa0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7fb0: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7fc0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
7fd0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
7fe0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7ff0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
8000: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
8010: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8020: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8030: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
8040: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
8050: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8060: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
8080: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
8090: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
80a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
80b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
80c0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
80d0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
80e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
80f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8100: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8110: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8120: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
8130: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
8140: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8150: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8160: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
8170: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
8180: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
8190: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
81a0: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
81b0: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
81c0: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
81d0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
81e0: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
81f0: 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.r = *pOp->p4
8200: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
8210: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
8220: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
8230: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8240: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8250: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
8260: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
8270: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
8280: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
8290: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
82a0: 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67  ** into a String
82b0: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
82c0: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
82d0: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
82e0: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
82f0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
8300: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
8310: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
8320: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
8330: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
8340: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
8350: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
8360: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
8370: 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65  RING, out2-prere
8380: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8390: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
83a0: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
83b0: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
83c0: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
83d0: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
83e0: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
83f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
8400: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
8410: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
8420: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
8430: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
8440: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d  ut, pOp->p4.z, -
8450: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
8460: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8470: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
8480: 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f  TE_TOOBIG ) goto
8490: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66   too_big;.    if
84a0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c  ( SQLITE_OK!=sql
84b0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
84c0: 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
84d0: 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f  oding) ) goto no
84e0: 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
84f0: 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63  ( pOut->szMalloc
8500: 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c  >0 && pOut->zMal
8510: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
8520: 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
8530: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
8540: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  ==0 );.    pOut-
8550: 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  >szMalloc = 0;. 
8560: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
8570: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
8580: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
8590: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
85a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
85b0: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
85c0: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
85d0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
85e0: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
85f0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
8600: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
8610: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e  pOut->n;.  }.#en
8620: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
8630: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
8640: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
8650: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
8660: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
8670: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8680: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8690: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
86a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
86b0: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
86c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
86d0: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
86e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
86f0: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
8700: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
8710: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
8720: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
8730: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
8740: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
8750: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8760: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8770: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
8780: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
8790: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
87a0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
87b0: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
87c0: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
87d0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
87e0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
87f0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
8800: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
8810: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
8820: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
8830: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
8840: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
8850: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
8860: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
8870: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
8880: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
8890: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
88a0: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
88b0: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
88c0: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
88d0: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
88e0: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
88f0: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
8900: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
8910: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
8920: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
8930: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
8940: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
8950: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
8960: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
8970: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
8980: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
8990: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
89a0: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
89b0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
89c0: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
89d0: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
89e0: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
89f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8a00: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8a10: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
8a20: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74   nullFlag;.  cnt
8a30: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
8a40: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
8a50: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
8a60: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8a70: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8a80: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
8a90: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
8aa0: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
8ab0: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
8ac0: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
8ad0: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
8ae0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8af0: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
8b00: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
8b10: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
8b20: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
8b30: 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a  .    cnt--;.  }.
8b40: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8b50: 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20  pcode: SoftNull 
8b60: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  P1 * * * *.** Sy
8b70: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e  nopsis:  r[P1]=N
8b80: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
8b90: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
8ba0: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
8bb0: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
8bc0: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
8bd0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
8be0: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
8bf0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
8c00: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
8c10: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
8c20: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
8c30: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
8c40: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
8c50: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
8c60: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
8c70: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
8c80: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
8c90: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
8ca0: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
8cb0: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
8cc0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8cd0: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
8ce0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
8cf0: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
8d00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8d10: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
8d20: 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f  pOut->flags|MEM_
8d30: 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66  Null)&~MEM_Undef
8d40: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
8d50: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  ../* Opcode: Blo
8d60: 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  b P1 P2 * P4 *.*
8d70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8d80: 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  ]=P4 (len=P1).**
8d90: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
8da0: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
8db0: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
8dc0: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
8dd0: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
8de0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  2..*/.case OP_Bl
8df0: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
8e00: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
8e10: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
8e20: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
8e30: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
8e40: 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  H );.  sqlite3Vd
8e50: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
8e60: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
8e70: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
8e80: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8e90: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8ea0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8eb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8ec0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
8ed0: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
8ee0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8ef0: 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50  ]=parameter(P1,P
8f00: 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  4).**.** Transfe
8f10: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
8f20: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
8f30: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8f40: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
8f50: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
8f60: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
8f70: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
8f80: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
8f90: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
8fa0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8fb0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
8fc0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
8fd0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8fe0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8ff0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
9000: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9010: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
9020: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
9030: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9040: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
9050: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9060: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
9070: 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70  p4.z==p->azVar[p
9080: 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70  Op->p1-1] );.  p
9090: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
90a0: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
90b0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
90c0: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
90d0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
90e0: 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  g;.  }.  sqlite3
90f0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9100: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
9110: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
9120: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
9130: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9140: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9150: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
9160: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
9170: 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33  r[P2@P3]=r[P1@P3
9180: 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  ].**.** Move the
9190: 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65   P3 values in re
91a0: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
91b0: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
91c0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
91d0: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
91e0: 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72  s P1..P1+P3-1 ar
91f0: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
9200: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
9210: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
9220: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
9230: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
9240: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
9250: 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20  overlap.  It is 
9260: 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20  an error.** for 
9270: 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  P3 to be less th
9280: 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  an 1..*/.case OP
9290: 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Move: {.  int n
92a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
92b0: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
92c0: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
92d0: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
92e0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
92f0: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
9300: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
9310: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
9320: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
9330: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9340: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
9350: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
9360: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20   assert( n>0 && 
9370: 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a  p1>0 && p2>0 );.
9380: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d    assert( p1+n<=
9390: 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29  p2 || p2+n<=p1 )
93a0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
93b0: 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  m[p1];.  pOut = 
93c0: 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b  &aMem[p2];.  do{
93d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
93e0: 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  t<=&aMem[(p->nMe
93f0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
9400: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9410: 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  n1<=&aMem[(p->nM
9420: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20  em-p->nCursor)] 
9430: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
9440: 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
9450: 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  );.    memAboutT
9460: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9470: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9480: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70  eMemMove(pOut, p
9490: 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  In1);.#ifdef SQL
94a0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
94b0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
94c0: 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26  om>=&aMem[p1] &&
94d0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
94e0: 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e  m<&aMem[p1+pOp->
94f0: 70 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  p3] ){.      pOu
9500: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
9510: 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p1 - pOp->p2;. 
9520: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
9530: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9540: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
9550: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
9560: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d  ++;.  }while( --
9570: 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
9580: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
9590: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
95a0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
95b0: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
95c0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
95d0: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
95e0: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
95f0: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9600: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
9610: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9620: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
9630: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
9640: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
9650: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
9660: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
9670: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
9680: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
9690: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
96a0: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
96b0: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
96c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
96d0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
96e0: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
96f0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
9700: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
9710: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9720: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9730: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9740: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9750: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
9760: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9770: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9780: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
9790: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
97a0: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
97b0: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
97c0: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
97d0: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
97e0: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
97f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
9800: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
9810: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
9820: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
9830: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
9840: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9850: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
9860: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
9870: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9880: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
9890: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
98a0: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
98b0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
98c0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
98d0: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
98e0: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
98f0: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
9900: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
9910: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
9920: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
9930: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
9940: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9950: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
9960: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
9970: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
9980: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
9990: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
99a0: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
99b0: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
99c0: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
99d0: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
99e0: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
99f0: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
9a00: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
9a10: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9a30: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
9a40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9a50: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9a60: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9a70: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9a80: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
9a90: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9aa0: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9ab0: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
9ac0: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
9ad0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
9ae0: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
9af0: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
9b00: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
9b10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
9b20: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
9b30: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
9b40: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
9b50: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
9b60: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
9b70: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
9b80: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
9b90: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
9ba0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
9bb0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
9bc0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
9bd0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
9be0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
9bf0: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
9c00: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
9c10: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
9c20: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
9c30: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
9c40: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
9c50: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
9c60: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
9c70: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
9c80: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
9c90: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
9ca0: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
9cb0: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
9cc0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9cd0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
9ce0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
9cf0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
9d00: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
9d10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
9d20: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
9d30: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
9d40: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
9d50: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
9d60: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
9d70: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
9d80: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
9d90: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20  ProgressLimit.  
9da0: 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73   && db->xProgres
9db0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
9dc0: 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  rg)!=0.  ){.    
9dd0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
9de0: 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  RRUPT;.    goto 
9df0: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
9e00: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
9e10: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
9e20: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
9e30: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
9e40: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
9e50: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
9e60: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
9e70: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
9e80: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
9e90: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
9ea0: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
9eb0: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
9ec0: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
9ed0: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
9ee0: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
9ef0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
9f00: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
9f10: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
9f20: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
9f30: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
9f40: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
9f50: 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b  nal );.    break
9f60: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
9f70: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
9f80: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
9f90: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
9fa0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
9fb0: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
9fc0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
9fd0: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
9fe0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
9ff0: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
a000: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a010: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
a020: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
a030: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
a040: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a050: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
a060: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
a070: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
a080: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
a090: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
a0a0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
a0b0: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
a0c0: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
a0d0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
a0e0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
a0f0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
a100: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
a110: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a120: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
a130: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
a140: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
a150: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
a160: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
a170: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
a180: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
a190: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
a1a0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
a1b0: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
a1c0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a1d0: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
a1e0: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
a1f0: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
a200: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
a210: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
a220: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a230: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
a240: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
a250: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
a260: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
a270: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
a280: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
a290: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
a2a0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
a2b0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a2c0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
a2d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
a2e0: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
a2f0: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
a300: 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  E);.  if( NEVER(
a310: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
a320: 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
a330: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
a340: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
a350: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
a360: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
a370: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
a380: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
a390: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
a3a0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
a3b0: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
a3c0: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
a3d0: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
a3e0: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
a3f0: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
a400: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
a410: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
a420: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
a430: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
a440: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a450: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
a460: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
a470: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a480: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
a490: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
a4a0: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
a4b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
a4c0: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
a4d0: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
a4e0: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
a4f0: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
a500: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
a510: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
a520: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
a530: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
a540: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
a550: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
a560: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
a570: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
a580: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
a590: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
a5a0: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
a5b0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
a5c0: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
a5d0: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
a5e0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
a5f0: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
a600: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a610: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
a620: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
a630: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
a640: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
a650: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
a660: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
a670: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
a680: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a690: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a6a0: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
a6b0: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
a6c0: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
a6d0: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
a6e0: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
a6f0: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
a700: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
a710: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
a720: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
a730: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
a740: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
a750: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
a760: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
a770: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
a780: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
a790: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
a7a0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
a7b0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
a7c0: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
a7d0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
a7e0: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
a7f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
a800: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
a810: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
a820: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
a830: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
a840: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
a850: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
a860: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
a870: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
a880: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
a890: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
a8a0: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
a8b0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
a8c0: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
a8d0: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
a8e0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
a8f0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
a900: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
a910: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
a920: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
a930: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
a940: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
a950: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
a960: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
a970: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
a980: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
a990: 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
a9a0: 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d  t)nByte+2, pOut=
a9b0: 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f  =pIn2) ){.    go
a9c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
a9d0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
a9e0: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
a9f0: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
aa00: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
aa10: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
aa20: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
aa30: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
aa40: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
aa50: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
aa60: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30  pOut->z[nByte]=0
aa70: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
aa80: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
aa90: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
aaa0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
aab0: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
aac0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
aad0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
aae0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
aaf0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ab00: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
ab10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ab20: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
ab30: 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]+r[P2].**.** 
ab40: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
ab50: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
ab60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ab70: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
ab80: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
ab90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
aba0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
abb0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
abc0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
abd0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
abe0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
abf0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ac00: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  :  r[P3]=r[P1]*r
ac10: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
ac20: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
ac30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ac40: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
ac50: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
ac60: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
ac70: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ac80: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ac90: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
aca0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
acb0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
acc0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
acd0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
ace0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
acf0: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
ad00: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
ad10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ad20: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
ad30: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
ad40: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
ad50: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ad60: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ad70: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ad80: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ad90: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
ada0: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
adb0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
adc0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
add0: 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69  ]/r[P1].**.** Di
ade0: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
adf0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
ae00: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ae10: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
ae20: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
ae30: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ae40: 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20   (P3=P2/P1). If 
ae50: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a  the value in .**
ae60: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
ae70: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
ae80: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49  esult is NULL. I
ae90: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
aea0: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20  s .** NULL, the 
aeb0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
aec0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
aed0: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
aee0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
aef0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72  :  r[P3]=r[P2]%r
af00: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75  [P1].**.** Compu
af10: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
af20: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72   after integer r
af30: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69  egister P2 is di
af40: 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67  vided by .** reg
af50: 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f  ister P1 and sto
af60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
af70: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a   register P3. .*
af80: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
af90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
afa0: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
afb0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
afc0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
afd0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
afe0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
aff0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b010: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
b020: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b030: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
b040: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
b050: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b060: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
b070: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b080: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
b090: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b0a0: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
b0b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b0c0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b0e0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
b0f0: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
b100: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
b110: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
b120: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b130: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
b140: 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20   out3 */.  char 
b150: 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74  bIntint;   /* St
b160: 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f  arted out as two
b170: 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64   integer operand
b180: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
b190: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
b1a0: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
b1b0: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
b1c0: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20  */.  u16 type1; 
b1d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
b1e0: 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  type of left ope
b1f0: 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79  rand */.  u16 ty
b200: 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe2;      /* Num
b210: 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67  eric type of rig
b220: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
b230: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
b240: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
b250: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b260: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
b270: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b280: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
b290: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
b2a0: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
b2b0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
b2c0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b2d0: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
b2e0: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
b2f0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
b300: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
b310: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79  m[pOp->p1];.  ty
b320: 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe1 = numericTyp
b330: 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  e(pIn1);.  pIn2 
b340: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b350: 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65  ;.  type2 = nume
b360: 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20  ricType(pIn2);. 
b370: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
b380: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
b390: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
b3a0: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
b3b0: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
b3c0: 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20  Null)!=0 ) goto 
b3d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b3e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28  t_is_null;.  if(
b3f0: 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20   (type1 & type2 
b400: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b  & MEM_Int)!=0 ){
b410: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
b420: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
b430: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
b440: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
b450: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
b460: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
b470: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
b480: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
b490: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b4a0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b4b0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b4c0: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
b4d0: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
b4e0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
b4f0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
b500: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
b510: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
b520: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
b530: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
b540: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
b550: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
b560: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
b570: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
b580: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b590: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
b5a0: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
b5b0: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
b5c0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
b5d0: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
b5e0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b5f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b600: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
b610: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
b620: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b630: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b640: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
b650: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
b660: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
b670: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b680: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
b690: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
b6a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
b6b0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
b6c0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62  ;.  }else{.    b
b6d0: 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d  Intint = 0;.fp_m
b6e0: 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71  ath:.    rA = sq
b6f0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
b700: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
b710: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
b720: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
b730: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
b740: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
b750: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b760: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
b770: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b780: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
b790: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
b7a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b7b0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
b7c0: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
b7d0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
b7e0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
b7f0: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
b800: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
b810: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
b820: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
b830: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
b840: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
b850: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
b860: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b870: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
b880: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
b890: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
b8a0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
b8b0: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
b8c0: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
b8d0: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
b8e0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
b8f0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b900: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b910: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
b920: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
b930: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
b940: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
b950: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b960: 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20   }.    }.#ifdef 
b970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
b980: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70  TING_POINT.    p
b990: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20  Out->u.i = rB;. 
b9a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
b9b0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
b9c0: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20  ;.#else.    if( 
b9d0: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
b9e0: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
b9f0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
ba00: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
ba10: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20      pOut->u.r = 
ba20: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
ba30: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
ba40: 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20  _Real);.    if( 
ba50: 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d  ((type1|type2)&M
ba60: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21  EM_Real)==0 && !
ba70: 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20  bIntint ){.     
ba80: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
ba90: 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74  gerAffinity(pOut
baa0: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
bab0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
bac0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bad0: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
bae0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
baf0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
bb00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
bb10: 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34  ollSeq P1 * * P4
bb20: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
bb30: 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c  ointer to a Coll
bb40: 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74  Seq struct. If t
bb50: 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20  he next call to 
bb60: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  a user function.
bb70: 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20  ** or aggregate 
bb80: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74  calls sqlite3Get
bb90: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74  FuncCollSeq(), t
bba0: 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  his collation se
bbb0: 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62  quence will.** b
bbc0: 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73  e returned. This
bbd0: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
bbe0: 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20  built-in min(), 
bbf0: 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66  max() and nullif
bc00: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e  ().** functions.
bc10: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
bc20: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
bc30: 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  t is a register 
bc40: 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e  that a subsequen
bc50: 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61  t min() or.** ma
bc60: 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69  x() aggregate wi
bc70: 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74  ll set to 1 if t
bc80: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69  he current row i
bc90: 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75  s not the minimu
bca0: 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e  m or.** maximum.
bcb0: 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65    The P1 registe
bcc0: 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  r is initialized
bcd0: 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e   to 0 by this in
bce0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
bcf0: 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75   The interface u
bd00: 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65  sed by the imple
bd10: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
bd20: 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20   aforementioned 
bd30: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20  functions.** to 
bd40: 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  retrieve the col
bd50: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
bd60: 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f  set by this opco
bd70: 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  de is not availa
bd80: 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c  ble.** publicly,
bd90: 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75   only to user fu
bda0: 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20  nctions defined 
bdb0: 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61  in func.c..*/.ca
bdc0: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
bdd0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
bde0: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
bdf0: 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  EQ );.  if( pOp-
be00: 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
be10: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
be20: 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  4(&aMem[pOp->p1]
be30: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 0);.  }.  brea
be40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
be50: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
be60: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
be70: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
be80: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
be90: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
bea0: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
beb0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
bec0: 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65  nction structure
bed0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73   that.** defines
bee0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77   the function) w
bef0: 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73  ith P5 arguments
bf00: 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
bf10: 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73  ster P2 and.** s
bf20: 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20  uccessors.  The 
bf30: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
bf40: 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  nction is stored
bf50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bf60: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
bf70: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
bf80: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
bf90: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
bfa0: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
bfb0: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
bfc0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
bfd0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
bfe0: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
bff0: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
c000: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
c010: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
c020: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
c030: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
c040: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
c050: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
c060: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
c070: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
c080: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
c090: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
c0a0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
c0b0: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
c0c0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
c0d0: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
c0e0: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
c0f0: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
c100: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
c110: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
c120: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
c130: 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67  : AggStep and Ag
c140: 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f  gFinal.*/.case O
c150: 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20  P_Function: {.  
c160: 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41  int i;.  Mem *pA
c170: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  rg;.  sqlite3_co
c180: 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
c190: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
c1a0: 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  al;.  int n;..  
c1b0: 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
c1c0: 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
c1d0: 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
c1e0: 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73   || n==0 );.  as
c1f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
c200: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
c210: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
c220: 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d   );.  ctx.pOut =
c230: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
c240: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
c250: 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75 74 29  nge(p, ctx.pOut)
c260: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  ;..  assert( n==
c270: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
c280: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
c290: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c2a0: 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
c2b0: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
c2c0: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
c2d0: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
c2e0: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
c2f0: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
c300: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
c310: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
c320: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
c330: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
c340: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
c350: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
c360: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
c370: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
c380: 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  pArg);.  }..  as
c390: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
c3a0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
c3b0: 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
c3c0: 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
c3d0: 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20  ctx.iOp = pc;.  
c3e0: 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20  ctx.pVdbe = p;. 
c3f0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c400: 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  ctx.pOut, MEM_Nu
c410: 6c 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72 72 6f  ll);.  ctx.fErro
c420: 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 64 62  rOrAux = 0;.  db
c430: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
c440: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78  stRowid;.  (*ctx
c450: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
c460: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
c470: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
c480: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
c490: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
c4a0: 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62  owid;  /* Rememb
c4b0: 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67 65 73  er rowid changes
c4c0: 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63 20 2a   made by xFunc *
c4d0: 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  /..  /* If the f
c4e0: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
c4f0: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
c500: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
c510: 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f  .  if( ctx.fErro
c520: 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66  rOrAux ){.    if
c530: 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b  ( ctx.isError ){
c540: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
c550: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
c560: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
c570: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
c580: 74 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20  t(ctx.pOut));.  
c590: 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
c5a0: 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
c5b0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
c5c0: 65 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20  eAuxData(p, pc, 
c5d0: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20  pOp->p1);.  }.. 
c5e0: 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
c5f0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
c600: 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ion into registe
c610: 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65  r P3 */.  sqlite
c620: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
c630: 69 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e  ing(ctx.pOut, en
c640: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 73  coding);.  if( s
c650: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
c660: 42 69 67 28 63 74 78 2e 70 4f 75 74 29 20 29 7b  Big(ctx.pOut) ){
c670: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
c680: 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54  g;.  }..  REGIST
c690: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
c6a0: 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55  , ctx.pOut);.  U
c6b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c6c0: 5a 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20  ZE(ctx.pOut);.  
c6d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c6e0: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
c6f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c700: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c710: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c720: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c730: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c740: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c750: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c760: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c770: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c780: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c790: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c7a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c7b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c7c0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c7e0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32  r[P3]=r[P1]|r[P2
c7f0: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
c800: 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20   bit-wise OR of 
c810: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c820: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
c830: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
c840: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
c850: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
c860: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
c870: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
c880: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
c890: 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74  pcode: ShiftLeft
c8a0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c8b0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c8c0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
c8d0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
c8e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
c8f0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
c900: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
c910: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
c920: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
c930: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
c940: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** 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 53 68 69 66  ./* Opcode: Shif
c9b0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
c9c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c9d0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72    r[P3]=r[P2]>>r
c9e0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
c9f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
ca00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ca10: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
ca20: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
ca30: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
ca40: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
ca50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
ca60: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
ca70: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ca80: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ca90: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
caa0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
cab0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
cac0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
cad0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cae0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
caf0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cb00: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
cb30: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
cb40: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
cb50: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
cb60: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cb70: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
cb80: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cb90: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
cba0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
cbb0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
cbc0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
cbd0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
cbe0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
cbf0: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
cc00: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cc10: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
cc20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
cc30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
cc40: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
cc50: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
cc60: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
cc70: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
cc80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
cc90: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
cca0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
ccb0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
ccc0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
ccd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
cce0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
ccf0: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
cd00: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
cd10: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
cd20: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
cd30: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
cd40: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
cd50: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
cd60: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
cd70: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
cd80: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
cd90: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
cda0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
cdb0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
cdc0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
cdd0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
cde0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
cdf0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
ce00: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
ce10: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
ce20: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
ce30: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
ce40: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
ce50: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
ce60: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
ce70: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
ce80: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
ce90: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
cea0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
ceb0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
cec0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
ced0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
cee0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
cef0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
cf00: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
cf10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
cf20: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
cf30: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
cf40: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
cf50: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
cf60: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
cf70: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
cf80: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
cf90: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
cfa0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
cfb0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
cfc0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
cfd0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
cfe0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
cff0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
d000: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
d010: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
d020: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
d030: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
d040: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
d050: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
d060: 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20  P1]=r[P1]+P2.** 
d070: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
d080: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
d090: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d0a0: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
d0b0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
d0c0: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
d0d0: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
d0e0: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
d0f0: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
d100: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
d110: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
d120: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d130: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d140: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
d150: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
d160: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
d170: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
d180: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
d190: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
d1a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d1b0: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
d1c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
d1d0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d1e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d1f0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d200: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
d210: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
d220: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
d230: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
d240: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
d250: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
d260: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
d270: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
d280: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
d290: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
d2a0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
d2b0: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
d2c0: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
d2e0: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
d2f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d300: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
d310: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d320: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
d330: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
d340: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
d350: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
d360: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
d370: 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73  ken((pIn1->flags
d380: 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29  &MEM_Int)==0, 2)
d390: 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
d3a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
d3b0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
d3c0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
d3d0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
d3e0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20  ITE_MISMATCH;.  
d3f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
d400: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
d410: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
d420: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
d430: 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   - 1;.        br
d440: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
d450: 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54   }.  }.  MemSetT
d460: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
d470: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d480: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
d490: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d4a0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
d4b0: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
d4c0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d4d0: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
d4e0: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
d4f0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
d500: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
d510: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
d520: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
d530: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
d540: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
d550: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
d560: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
d570: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
d580: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
d590: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
d5a0: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
d5b0: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
d5c0: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
d5d0: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
d5e0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
d5f0: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
d600: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
d610: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d620: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d630: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d640: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
d650: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d660: 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Int ){.    sqlit
d670: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
d680: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
d690: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
d6a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d6b0: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
d6c0: 65 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20  e: Cast P1 P2 * 
d6d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d6e0: 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29   affinity(r[P1])
d6f0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d700: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d710: 65 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20  er P1 to be the 
d720: 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20  type defined by 
d730: 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a  P2..** .** <ul>.
d740: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37  ** <li value="97
d750: 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76  "> TEXT.** <li v
d760: 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a  alue="98"> BLOB.
d770: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39  ** <li value="99
d780: 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c  "> NUMERIC.** <l
d790: 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49  i value="100"> I
d7a0: 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61  NTEGER.** <li va
d7b0: 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a  lue="101"> REAL.
d7c0: 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41  ** </ul>.**.** A
d7d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
d7e0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
d7f0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
d800: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
d810: 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b  .case OP_Cast: {
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d830: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
d840: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53  sert( pOp->p2>=S
d850: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26  QLITE_AFF_NONE &
d860: 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54  & pOp->p2<=SQLIT
d870: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
d880: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
d890: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  2==SQLITE_AFF_TE
d8a0: 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  XT );.  testcase
d8b0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
d8c0: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20  E_AFF_NONE );.  
d8d0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
d8e0: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  2==SQLITE_AFF_NU
d8f0: 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63  MERIC );.  testc
d900: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
d910: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
d920: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d930: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d940: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49  AFF_REAL );.  pI
d950: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d960: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
d970: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
d980: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
d990: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  lob(pIn1);.  sql
d9a0: 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28  ite3VdbeMemCast(
d9b0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65  pIn1, pOp->p2, e
d9c0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
d9d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d9e0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
d9f0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
da00: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
da10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
da20: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
da30: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
da40: 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50  P1]<r[P3] goto P
da50: 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  2.**.** Compare 
da60: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
da70: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
da80: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
da90: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
daa0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
dab0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
dac0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
dad0: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
dae0: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
daf0: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
db00: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
db10: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
db20: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
db30: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
db40: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
db50: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
db60: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
db70: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
db80: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
db90: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
dba0: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
dbb0: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
dbc0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
dbd0: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
dbe0: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
dbf0: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
dc00: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
dc10: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
dc20: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
dc30: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
dc40: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
dc50: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
dc60: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
dc70: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
dc80: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
dc90: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
dca0: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
dcb0: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
dcc0: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
dcd0: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
dce0: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
dcf0: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
dd00: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
dd10: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
dd20: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
dd30: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
dd40: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
dd50: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
dd60: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
dd70: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
dd80: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
dd90: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
dda0: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
ddb0: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
ddc0: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
ddd0: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
dde0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
ddf0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
de00: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
de10: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
de20: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
de30: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
de40: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
de50: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
de60: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
de70: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
de80: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
de90: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
dea0: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
deb0: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
dec0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
ded0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
dee0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
def0: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
df00: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
df10: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
df20: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
df30: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
df40: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
df50: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
df60: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
df70: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
df80: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
df90: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  obs..**.** If th
dfa0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
dfb0: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
dfc0: 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  t, then do not j
dfd0: 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a  ump.  Instead,.*
dfe0: 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61  * store a boolea
dff0: 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72  n result (either
e000: 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c   0, or 1, or NUL
e010: 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  L) in register P
e020: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
e030: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69  SQLITE_NULLEQ bi
e040: 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20  t is set in P5, 
e050: 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73  then NULL values
e060: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a   are considered.
e070: 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20  ** equal to one 
e080: 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65  another, provide
e090: 64 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  d that they do n
e0a0: 6f 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45  ot have their ME
e0b0: 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74  M_Cleared.** bit
e0c0: 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   set..*/./* Opco
e0d0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
e0e0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e0f0: 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50  s: if r[P1]!=r[P
e100: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e110: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e120: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e130: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e140: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e150: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
e160: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
e170: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
e180: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
e190: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
e1a0: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
e1b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
e1c0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
e1d0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
e1e0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e1f0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e200: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
e210: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
e220: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
e230: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
e240: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
e250: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
e260: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
e270: 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69  is false.  If ei
e280: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e290: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e2a0: 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a  sult is true..**
e2b0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
e2c0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
e2d0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
e2e0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
e2f0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
e300: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
e310: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
e320: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
e330: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
e340: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e350: 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33  : if r[P1]==r[P3
e360: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e370: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e380: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e390: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e3a0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e3b0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
e3c0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
e3d0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
e3e0: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
e3f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e400: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e410: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e420: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e430: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e440: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e450: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e460: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e470: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e480: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e490: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e4a0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e4b0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e4c0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
e4d0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e4e0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e4f0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e500: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
e510: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e520: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e530: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e540: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e550: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e560: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e570: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e580: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
e590: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e5a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e5b0: 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]<=r[P3] goto
e5c0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e5d0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e5e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e5f0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e600: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e610: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e620: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c  register P3 is l
e630: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
e640: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
e650: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
e660: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
e670: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
e680: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e690: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
e6a0: 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Gt P1 P2 P3 P4 
e6b0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e6c0: 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67  if r[P1]>r[P3] g
e6d0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e6e0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e6f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e700: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e710: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e720: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
e750: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e760: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e770: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e780: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e790: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e7a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
e7b0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e7c0: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e7d0: 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]>=r[P3] goto P
e7e0: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e7f0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e800: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e810: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e820: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e830: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e840: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
e850: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
e860: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
e870: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
e880: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
e890: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e8a0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e8b0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
e8c0: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
e8d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
e8e0: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
e8f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e910: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
e920: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e930: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e950: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
e960: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e970: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
e980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e990: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
e9a0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e9b0: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
e9c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e9d0: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
e9e0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e9f0: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
ea00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ea10: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
ea20: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
ea30: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
ea40: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
ea50: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
ea60: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
ea70: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
ea80: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
ea90: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
eaa0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
eab0: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
eac0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
ead0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
eae0: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
eaf0: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
eb00: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
eb10: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
eb20: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
eb30: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
eb40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
eb50: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
eb60: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  p3];.  flags1 = 
eb70: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66  pIn1->flags;.  f
eb80: 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
eb90: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
eba0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
ebb0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
ebc0: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
ebd0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
ebe0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
ebf0: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
ec00: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
ec10: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
ec20: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
ec30: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
ec40: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
ec50: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
ec60: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
ec70: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
ec80: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
ec90: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
eca0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
ecb0: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
ecc0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
ecd0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
ece0: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
ecf0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
ed00: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
ed10: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43   (flags1 & MEM_C
ed20: 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20  leared)==0 );.  
ed30: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
ed40: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
ed50: 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a  MPIFNULL)==0 );.
ed60: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
ed70: 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  1&MEM_Null)!=0. 
ed80: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
ed90: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
eda0: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
edb0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a  MEM_Cleared)==0.
edc0: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
edd0: 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65   res = 0;  /* Re
ede0: 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20  sults are equal 
edf0: 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
ee00: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
ee10: 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65    /* Results are
ee20: 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20   not equal */.  
ee30: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
ee40: 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  .      /* SQLITE
ee50: 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72  _NULLEQ is clear
ee60: 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e   and at least on
ee70: 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
ee80: 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  L,.      ** then
ee90: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
eea0: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
eeb0: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
eec0: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
eed0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
eee0: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
eef0: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
ef00: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef10: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20  STOREP2 ){.     
ef20: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
ef30: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
ef40: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ef50: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
ef60: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
ef70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
ef80: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
ef90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64  else{.        Vd
efa0: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
efb0: 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  3);.        if( 
efc0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
efd0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20  _JUMPIFNULL ){. 
efe0: 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f           pc = pO
eff0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 20  p->p2-1;.       
f000: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
f010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
f020: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
f030: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f040: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
f050: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
f060: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
f070: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
f080: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
f090: 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
f0a0: 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
f0b0: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
f0c0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
f0d0: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
f0e0: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
f0f0: 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
f100: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
f110: 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ,0);.      }.   
f120: 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
f130: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
f140: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
f150: 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
f160: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f170: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
f180: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
f190: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
f1a0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
f1b0: 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
f1c0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f1d0: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
f1e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
f1f0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
f200: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
f210: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
f220: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
f230: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
f240: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
f250: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
f260: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f270: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
f280: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
f290: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
f2a0: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
f2b0: 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  s & MEM_Str)==0 
f2c0: 26 26 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  && (pIn3->flags 
f2d0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f2e0: 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
f2f0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
f300: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
f310: 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
f320: 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
f330: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
f340: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f350: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
f360: 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e  fy(pIn3, encodin
f370: 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  g, 1);.      }. 
f380: 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
f390: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
f3a0: 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
f3b0: 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
f3c0: 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c      if( pIn1->fl
f3d0: 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
f3e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
f3f0: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
f400: 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c  (pIn1);.      fl
f410: 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72  ags1 &= ~MEM_Zer
f420: 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  o;.    }.    if(
f430: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
f440: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
f450: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
f460: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
f470: 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d  .      flags3 &=
f480: 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20   ~MEM_Zero;.    
f490: 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  }.    if( db->ma
f4a0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
f4b0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65  o no_mem;.    re
f4c0: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
f4d0: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
f4e0: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
f4f0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
f500: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
f510: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
f520: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
f530: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f540: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
f550: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
f560: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f570: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
f580: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
f590: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
f5a0: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
f5b0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
f5c0: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
f5d0: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
f5e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
f5f0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
f600: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
f610: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
f620: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f630: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
f640: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f650: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
f660: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
f670: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
f680: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f690: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
f6a0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
f6b0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
f6c0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
f6d0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f6e0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f6f0: 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35  res!=0, (pOp->p5
f700: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
f710: 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20  )?2:3);.    if( 
f720: 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
f730: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f740: 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f   }.  }.  /* Undo
f750: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
f760: 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
f770: 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
f780: 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
f790: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
f7a0: 66 6c 61 67 73 31 3b 0a 20 20 70 49 6e 33 2d 3e  flags1;.  pIn3->
f7b0: 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
f7c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f7d0: 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
f7e0: 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
f7f0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
f800: 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
f810: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
f820: 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68  perator to be th
f830: 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e  e array.** of in
f840: 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  tegers in P4..**
f850: 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
f860: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
f870: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
f880: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
f890: 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
f8a0: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
f8b0: 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
f8c0: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
f8d0: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
f8e0: 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
f8f0: 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
f900: 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a   OP_Compare..*/.
f910: 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
f920: 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
f930: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
f940: 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
f950: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
f960: 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20  i );.  aPermute 
f970: 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
f980: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f990: 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
f9a0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f9b0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
f9c0: 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
f9d0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
f9e0: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
f9f0: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
fa00: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
fa10: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
fa20: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
fa30: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
fa40: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
fa50: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
fa60: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
fa70: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
fa80: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
fa90: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
faa0: 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
fab0: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
fac0: 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
fad0: 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
fae0: 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
faf0: 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
fb00: 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
fb10: 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
fb20: 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
fb30: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
fb40: 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
fb50: 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
fb60: 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
fb70: 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
fb80: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
fb90: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
fba0: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
fbb0: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
fbc0: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
fbd0: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
fbe0: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
fbf0: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
fc00: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
fc10: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
fc20: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
fc30: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
fc40: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
fc50: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
fc60: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
fc70: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
fc80: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
fc90: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
fca0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
fcb0: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
fcc0: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
fcd0: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
fce0: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
fcf0: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
fd00: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
fd10: 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
fd20: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
fd30: 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
fd40: 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
fd50: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
fd60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
fd70: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
fd80: 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
fd90: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
fda0: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
fdb0: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
fdc0: 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
fdd0: 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
fde0: 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
fdf0: 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
fe00: 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
fe10: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
fe20: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
fe30: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
fe40: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
fe50: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
fe60: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
fe70: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
fe80: 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
fe90: 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
fea0: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
feb0: 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
fec0: 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
fed0: 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
fee0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
fef0: 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
ff00: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
ff10: 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
ff20: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
ff30: 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
ff40: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
ff50: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
ff60: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
ff70: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
ff80: 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
ff90: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
ffa0: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
ffb0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
ffc0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
ffd0: 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
ffe0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
fff0: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
10000 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
10010 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
10020 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
10030 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
10040 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
10050 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
10060 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
10070 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
10080 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
10090 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
100a0 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
100b0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
100c0 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
100d0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
100e0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
100f0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
10100 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
10110 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
10120 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
10130 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
10140 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
10150 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
10160 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
10170 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
10180 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
10190 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
101a0 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
101b0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
101c0 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
101d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
101e0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
101f0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
10200 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
10210 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
10220 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
10230 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
10240 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
10250 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
10260 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
10270 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
10280 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
10290 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
102a0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
102b0 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
102c0 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
102d0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
102e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
102f0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
10300 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
10310 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64 62 65  p->p1 - 1;  Vdbe
10320 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29  BranchTaken(0,3)
10330 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
10340 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
10350 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
10360 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  1;  VdbeBranchTa
10370 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73  ken(1,3);.  }els
10380 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
10390 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p3 - 1;  VdbeBr
103a0 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
103b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
103c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
103d0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
103e0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
103f0 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
10400 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
10410 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
10420 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
10430 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
10440 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
10450 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
10460 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
10470 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
10480 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
10490 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
104a0 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
104b0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
104c0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
104d0 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
104e0 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
104f0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
10500 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
10510 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
10520 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
10530 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
10540 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
10550 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
10560 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
10570 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
10580 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
10590 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
105a0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
105b0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
105c0 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
105d0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
105e0 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
105f0 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
10600 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
10610 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
10620 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
10630 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
10640 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
10650 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
10660 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10670 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
10680 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
10690 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
106a0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
106b0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
106c0 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
106d0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
106e0 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
106f0 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
10700 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
10710 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
10720 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
10730 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
10740 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
10750 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
10760 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10770 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
10780 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
10790 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
107a0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
107b0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
107c0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
107d0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
107e0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
107f0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
10800 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
10810 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10820 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
10830 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
10840 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
10850 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10860 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
10870 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
10880 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
10890 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
108a0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
108b0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
108c0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
108d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
108e0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
108f0 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
10900 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
10910 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
10920 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
10930 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
10940 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
10950 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
10960 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
10970 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10980 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
10990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
109a0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
109b0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
109c0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
109d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
109e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
109f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10a00 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
10a10 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
10a20 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
10a30 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
10a40 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
10a50 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
10a60 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
10a70 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
10a80 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
10a90 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10aa0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
10ab0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
10ac0 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
10ad0 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10af0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
10b00 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
10b10 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10b20 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
10b30 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10b40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10b50 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
10b60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
10b70 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
10b80 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
10b90 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
10ba0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
10bb0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10bc0 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
10bd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10be0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
10bf0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
10c00 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
10c10 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
10c20 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
10c30 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
10c40 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
10c50 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
10c60 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
10c70 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
10c80 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
10c90 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
10ca0 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
10cb0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
10cc0 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10ce0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
10cf0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
10d00 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10d10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
10d20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10d30 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
10d40 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
10d50 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
10d60 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
10d70 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
10d80 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
10d90 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
10da0 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
10db0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
10dc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10dd0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
10de0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  P2 * * *.**.** C
10df0 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20  heck the "once" 
10e00 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20  flag number P1. 
10e10 49 66 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75  If it is set, ju
10e20 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
10e30 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77  n P2. .** Otherw
10e40 69 73 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61  ise, set the fla
10e50 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  g and fall throu
10e60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
10e70 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49  nstruction..** I
10e80 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
10e90 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
10ea0 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20  s all following 
10eb0 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75  opcodes up throu
10ec0 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f  gh P2.** (but no
10ed0 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20  t including P2) 
10ee0 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65  to run just once
10ef0 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70   and to be skipp
10f00 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
10f10 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67  .** times throug
10f20 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a  h the loop..**.*
10f30 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61  * All "once" fla
10f40 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  gs are initially
10f50 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65   cleared wheneve
10f60 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  r a prepared sta
10f70 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20  tement.** first 
10f80 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a  begins to run..*
10f90 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20  /.case OP_Once: 
10fa0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10fb0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
10fc0 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f  t( pOp->p1<p->nO
10fd0 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62  nceFlag );.  Vdb
10fe0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
10ff0 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11000 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  1]!=0, 2);.  if(
11010 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
11020 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63  p->p1] ){.    pc
11030 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
11040 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f  }else{.    p->aO
11050 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11060 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
11070 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11080 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
11090 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
110a0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
110b0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
110c0 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
110d0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
110e0 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
110f0 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
11100 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
11110 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
11120 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
11130 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
11140 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
11150 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
11160 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
11170 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
11180 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11190 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
111a0 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
111b0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
111c0 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
111d0 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
111e0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
111f0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
11200 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11210 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11220 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
11230 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
11240 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
11250 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
11260 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11270 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
11280 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
11290 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
112a0 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
112b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
112c0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
112d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
112e0 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
112f0 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
11300 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11310 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
11320 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11330 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11340 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
11350 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
11360 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
11370 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
11380 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
11390 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
113a0 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
113b0 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
113c0 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
113d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
113e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
113f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
11400 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11410 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
11420 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
11430 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11440 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11450 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11460 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
11470 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
11480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11490 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
114a0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
114b0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
114c0 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
114d0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
114e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
114f0 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
11500 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11510 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
11520 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11530 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11540 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11550 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
11560 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11570 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
11580 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11590 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
115a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
115b0 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
115c0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
115d0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
115e0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
115f0 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
11600 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11610 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11620 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11630 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11640 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
11650 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
11660 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11670 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11680 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
11690 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
116a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
116b0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  umn P1 P2 P3 P4 
116c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
116d0 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20   r[P3]=PX.**.** 
116e0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61  Interpret the da
116f0 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  ta that cursor P
11700 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61  1 points to as a
11710 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74   structure built
11720 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61   using.** the Ma
11730 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
11740 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20  tion.  (See the 
11750 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
11760 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
11770 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
11780 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
11790 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20   of the data.)  
117a0 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74  Extract the P2-t
117b0 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d  h column.** from
117c0 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49   this record.  I
117d0 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
117e0 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a   that (P2+1) .**
117f0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
11800 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61  ecord, extract a
11810 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
11820 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64   value extracted
11830 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
11840 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
11850 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   If the column c
11860 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68  ontains fewer th
11870 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68  an P2 fields, th
11880 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  en extract a NUL
11890 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68  L.  Or,.** if th
118a0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
118b0 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68   a P4_MEM use th
118c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
118d0 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  4 argument as.**
118e0 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a   the result..**.
118f0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
11900 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20  _CLEARCACHE bit 
11910 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64  is set on P5 and
11920 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
11930 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  table cursor,.**
11940 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20   then the cache 
11950 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  of the cursor is
11960 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20   reset prior to 
11970 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63  extracting the c
11980 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69  olumn..** The fi
11990 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67  rst OP_Column ag
119a0 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74  ainst a pseudo-t
119b0 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76  able after the v
119c0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  alue of the cont
119d0 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ent.** register 
119e0 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75  has changed shou
119f0 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74  ld have this bit
11a00 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   set..**.** If t
11a10 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
11a20 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
11a30 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
11a40 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e  e set on P5 when
11a50 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
11a60 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
11a70 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
11a80 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
11a90 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
11aa0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
11ab0 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
11ac0 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
11ad0 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
11ae0 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
11af0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
11b00 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
11b10 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
11b20 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
11b30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
11b40 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79  umn: {.  i64 pay
11b50 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e  loadSize64; /* N
11b60 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11b70 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
11b80 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
11b90 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
11ba0 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
11bb0 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
11bc0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
11bd0 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
11be0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
11bf0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
11c00 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
11c10 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
11c20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
11c30 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
11c40 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
11c50 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
11c60 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
11c70 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
11c80 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
11c90 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
11ca0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
11cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11cc0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
11cd0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
11ce0 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
11cf0 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
11d00 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
11d10 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
11d20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
11d30 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
11d40 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
11d50 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61   const u8 *zData
11d60 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74  ;   /* Part of t
11d70 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
11d80 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
11d90 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  st u8 *zHdr;    
11da0 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64  /* Next unparsed
11db0 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
11dc0 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  der */.  const u
11dd0 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50  8 *zEndHdr; /* P
11de0 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
11df0 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
11e00 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
11e10 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
11e20 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
11e30 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
11e40 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
11e50 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11e60 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
11e70 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
11e80 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
11e90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11ea0 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
11eb0 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
11ec0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
11ed0 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
11ee0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
11ef0 65 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66  eader */.  u16 f
11f00 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
11f10 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61   pDest->flags va
11f20 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  lue */.  Mem *pR
11f30 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
11f40 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
11f50 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
11f60 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
11f70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
11f80 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
11f90 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
11fa0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
11fb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
11fc0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
11fd0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
11fe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
11ff0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
12000 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
12010 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
12020 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
12030 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
12040 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
12050 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
12060 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66  pC->aOffset;.#if
12070 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12080 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12090 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
120a0 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a  bCursor==0 ); /*
120b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72   OP_Column never
120c0 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75   called on virtu
120d0 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  al table */.#end
120e0 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  if.  pCrsr = pC-
120f0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
12100 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
12110 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12120 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72  eg>0 ); /* pCrsr
12130 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54   NULL on PseudoT
12140 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72  ables */.  asser
12150 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
12160 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20  C->nullRow );   
12170 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75         /* pC->nu
12180 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54  llRow on PseudoT
12190 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
121a0 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
121b0 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
121c0 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
121d0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
121e0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
121f0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
12200 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
12210 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
12220 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75  ( pC->cacheStatu
12230 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29  s!=p->cacheCtr )
12240 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  {.    if( pC->nu
12250 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
12260 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20  f( pCrsr==0 ){. 
12270 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
12280 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12290 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
122a0 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
122b0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
122c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
122d0 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
122e0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
122f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
12300 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
12310 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
12320 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
12330 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
12340 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
12350 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
12360 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
12370 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
12380 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
12390 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
123a0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
123b0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
123c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
123d0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
123e0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
123f0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
12400 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
12410 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
12420 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
12430 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
12440 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
12450 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
12460 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  , &payloadSize64
12470 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
12480 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12490 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61   ); /* True beca
124a0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
124b0 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
124c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73   */.        /* s
124d0 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
124e0 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
124f0 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
12500 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
12510 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
12520 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
12530 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
12540 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
12550 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  .        ** larg
12560 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
12570 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
12580 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65  rt( (payloadSize
12590 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f  64 & SQLITE_MAX_
125a0 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f  U32)==(u64)paylo
125b0 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20  adSize64 );.    
125c0 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
125d0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65  qlite3BtreeKeyFe
125e0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
125f0 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  l);.        pC->
12600 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
12610 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
12620 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
12630 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
12640 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
12650 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
12660 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
12670 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
12680 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
12690 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f  Crsr, &pC->paylo
126a0 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20  adSize);.       
126b0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
126c0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44  ITE_OK );   /* D
126d0 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
126e0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20   fail */.       
126f0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
12700 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
12710 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
12720 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
12730 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
12740 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
12750 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
12760 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
12770 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
12780 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
12790 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
127a0 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
127b0 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
127c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
127d0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
127e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
127f0 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
12800 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61  ize > (u32)db->a
12810 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
12820 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
12830 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
12840 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ig;.      }.    
12850 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
12860 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
12870 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
12880 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
12890 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
128a0 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
128b0 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
128c0 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
128d0 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  = offset;..    /
128e0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
128f0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
12900 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
12910 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
12920 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
12930 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
12940 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
12950 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
12960 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
12970 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
12980 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
12990 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
129a0 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
129b0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
129c0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
129d0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
129e0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
129f0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
12a00 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
12a10 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
12a20 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
12a30 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
12a40 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
12a50 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
12a60 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
12a70 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
12a80 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
12a90 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
12aa0 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
12ab0 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
12ac0 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
12ad0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
12ae0 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20  fset > 98307 || 
12af0 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
12b00 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
12b10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
12b20 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
12b30 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12b40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
12b50 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
12b60 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  set ){.      /* 
12b70 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
12b80 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
12b90 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
12ba0 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
12bb0 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
12bc0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
12bd0 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
12be0 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
12bf0 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
12c00 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
12c10 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
12c20 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
12c30 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
12c40 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
12c50 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
12c60 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
12c70 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
12c80 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
12c90 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d  szRow = 0;.    }
12ca0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
12cb0 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61  lowing goto is a
12cc0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
12cd0 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74   It can be omitt
12ce0 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76  ed and.    ** ev
12cf0 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74  erything will st
12d00 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f  ill work.  But O
12d10 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73  P_Column is meas
12d20 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20  urably faster.  
12d30 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67    ** by skipping
12d40 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   the subsequent 
12d50 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69  conditional, whi
12d60 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75  ch is always tru
12d70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
12d80 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61  sert( pC->nHdrPa
12d90 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20  rsed<=p2 );     
12da0 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e      /* Condition
12db0 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20  al skipped */.  
12dc0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12dd0 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
12de0 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
12df0 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
12e00 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
12e10 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
12e20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
12e30 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
12e40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
12e50 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
12e60 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
12e70 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
12e80 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
12e90 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
12ea0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
12eb0 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
12ec0 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
12ed0 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
12ee0 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
12ef0 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
12f00 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
12f10 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
12f20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
12f30 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66  d_header:.    if
12f40 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
12f50 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
12f60 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
12f70 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
12f80 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
12f90 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
12fa0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
12fb0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
12fc0 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
12fd0 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
12fe0 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
12ff0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
13000 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13010 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
13020 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20  Offset[0], .    
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
13060 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13070 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13080 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
13090 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
130a0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
130b0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
130c0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
130d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
130e0 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
130f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13100 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
13110 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
13120 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
13130 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
13140 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
13150 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
13160 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
13170 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  set = aOffset[i]
13180 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
13190 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
131a0 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
131b0 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
131c0 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
131d0 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26   assert( i<=p2 &
131e0 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
131f0 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
13200 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c      if( zHdr[0]<
13210 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
13220 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20    t = zHdr[0];. 
13230 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
13240 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
13250 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
13260 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
13270 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
13280 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13290 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d    pC->aType[i] =
132a0 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69   t;.        szFi
132b0 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62  eld = sqlite3Vdb
132c0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
132d0 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65  );.        offse
132e0 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20  t += szField;.  
132f0 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74        if( offset
13300 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20  <szField ){  /* 
13310 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f  True if offset o
13320 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20  verflows */.    
13330 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45        zHdr = &zE
13340 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f  ndHdr[1];  /* Fo
13350 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52  rces SQLITE_CORR
13360 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77  UPT return below
13370 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72   */.          br
13380 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
13390 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
133a0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
133b0 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d   offset;.      }
133c0 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
133d0 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
133e0 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61        pC->nHdrPa
133f0 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20  rsed = i;.      
13400 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
13410 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44   (u32)(zHdr - zD
13420 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ata);.      if( 
13430 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
13440 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
13450 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
13460 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65  em);.        sMe
13470 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
13480 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ll;.      }.  . 
13490 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f       /* The reco
134a0 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66  rd is corrupt if
134b0 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
134c0 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a  owing are true:.
134d0 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65        ** (1) the
134e0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65   bytes of the he
134f0 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74  ader extend past
13500 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65   the declared he
13510 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20  ader size.      
13520 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48 64  **          (zHd
13530 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20  r>zEndHdr).     
13540 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69   ** (2) the enti
13550 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73  re header was us
13560 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64  ed but not all d
13570 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20  ata was used.   
13580 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28     **          (
13590 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr==zEndHdr &&
135a0 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79   offset!=pC->pay
135b0 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
135c0 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f  ** (3) the end o
135d0 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e  f the data exten
135e0 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e  ds beyond the en
135f0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  d of the record.
13600 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
13610 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d     (offset > pC-
13620 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
13630 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
13640 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
13650 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
13660 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e   || offset!=pC->
13670 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
13680 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20       || (offset 
13690 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
136a0 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  e).      ){.    
136b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
136c0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
136d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
136e0 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
136f0 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
13700 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e  * If after tryin
13710 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65  g to extra new e
13720 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
13730 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73  header, nHdrPars
13740 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69  ed is.    ** sti
13750 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c  ll not up to p2,
13760 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
13770 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
13780 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20  fewer than p2.  
13790 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53    ** columns.  S
137a0 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c  o the result wil
137b0 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65 20  l be either the 
137c0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72  default value or
137d0 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a   a NULL..    */.
137e0 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72      if( pC->nHdr
137f0 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
13800 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
13810 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20  ype==P4_MEM ){. 
13820 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
13830 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
13840 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e  (pDest, pOp->p4.
13850 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pMem, MEM_Static
13860 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
13870 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13880 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
13890 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  est);.      }.  
138a0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
138b0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  mn_out;.    }.  
138c0 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20  }..  /* Extract 
138d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  the content for 
138e0 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75  the p2+1-th colu
138f0 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e  mn.  Control can
13900 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68   only.  ** reach
13910 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61   this point if a
13920 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66  Offset[p2], aOff
13930 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70  set[p2+1], and p
13940 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72 65  C->aType[p2] are
13950 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e  .  ** all valid.
13960 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
13970 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  p2<pC->nHdrParse
13980 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  d );.  assert( r
13990 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
139a0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
139b0 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
139c0 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20 29  ariants(pDest) )
139d0 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
139e0 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29 20  ynamic(pDest) ) 
139f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13a00 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
13a10 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
13a20 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52  ];.  if( pC->szR
13a30 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31  ow>=aOffset[p2+1
13a40 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ] ){.    /* This
13a50 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63   is the common c
13a60 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65  ase where the de
13a70 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69  sired content fi
13a80 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e  ts on the origin
13a90 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d  al.    ** page -
13aa0 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65   where the conte
13ab0 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20  nt is not on an 
13ac0 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f  overflow page */
13ad0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13ae0 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52  SerialGet(pC->aR
13af0 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  ow+aOffset[p2], 
13b00 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c  t, pDest);.  }el
13b10 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20  se{.    /* This 
13b20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
13b30 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74  nly when content
13b40 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20   is on overflow 
13b50 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28  pages */.    if(
13b60 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50   ((pOp->p5 & (OP
13b70 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f  FLAG_LENGTHARG|O
13b80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13b90 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26  )!=0.          &
13ba0 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26  & ((t>=12 && (t&
13bb0 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e  1)==0) || (pOp->
13bc0 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45  p5 & OPFLAG_TYPE
13bd0 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20  OFARG)!=0)).    
13be0 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74   || (len = sqlit
13bf0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13c00 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29  Len(t))==0.    )
13c10 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65  {.      /* Conte
13c20 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74  nt is irrelevant
13c30 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20   for.      **   
13c40 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29   1. the typeof()
13c50 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20   function,.     
13c60 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65   **    2. the le
13c70 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
13c80 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c   if X is a blob,
13c90 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20   and.      **   
13ca0 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65   3. if the conte
13cb0 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72  nt length is zer
13cc0 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77  o..      ** So w
13cd0 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
13ce0 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  use bogus conten
13cf0 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
13d00 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63  ading.      ** c
13d10 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
13d20 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f 72  .  NULL will wor
13d30 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20  k for the value 
13d40 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20 20 20  for strings.    
13d50 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20 61    ** and blobs a
13d60 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69  nd whatever is i
13d70 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a  n the payloadSiz
13d80 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20  e64 variable.   
13d90 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20     ** will work 
13da0 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65  for everything e
13db0 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71  lse. */.      sq
13dc0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
13dd0 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29  et(t<=13 ? (u8*)
13de0 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
13df0 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20   0, t, pDest);. 
13e00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13e10 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
13e20 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
13e30 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
13e40 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62   len, !pC->isTab
13e50 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a 20         pDest);. 
13e80 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13e90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13ea0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13eb0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13ec0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13ed0 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73  eSerialGet((cons
13ee0 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20  t u8*)pDest->z, 
13ef0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  t, pDest);.     
13f00 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
13f10 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20   ~MEM_Ephem;.   
13f20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e   }.  }.  pDest->
13f30 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
13f40 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
13f50 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
13f60 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e 20 65  mn value is an e
13f70 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 2c  phemeral string,
13f80 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20 70 65   go ahead and pe
13f90 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61 74 20  rsist.  ** that 
13fa0 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65 20 74  string in case t
13fb0 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20  he cursor moves 
13fc0 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c 75 6d  before the colum
13fd0 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a 20  n value is.  ** 
13fe0 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  used.  The follo
13ff0 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73 20 74  wing code does t
14000 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  he equivalent of
14010 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
14020 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65 73 20  ).  ** but does 
14030 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20 20  it faster. */.  
14040 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c 61 67  if( (pDest->flag
14050 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  s & MEM_Ephem)!=
14060 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20 29 7b  0 && pDest->z ){
14070 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73 74 2d  .    fx = pDest-
14080 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
14090 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 20  r|MEM_Blob);.   
140a0 20 61 73 73 65 72 74 28 20 66 78 21 3d 30 20 29   assert( fx!=0 )
140b0 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63  ;.    zData = (c
140c0 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
140d0 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44 65  z;.    len = pDe
140e0 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 73  st->n;.    if( s
140f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
14100 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44 65 73  arAndResize(pDes
14110 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74 6f  t, len+2) ) goto
14120 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65 6d   no_mem;.    mem
14130 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
14140 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 70  ata, len);.    p
14150 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30  Dest->z[len] = 0
14160 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c  ;.    pDest->z[l
14170 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 70  en+1] = 0;.    p
14180 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66 78  Dest->flags = fx
14190 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 6f  |MEM_Term;.  }.o
141a0 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a  p_column_error:.
141b0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
141c0 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
141d0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
141e0 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
141f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14200 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
14210 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
14220 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
14230 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ty(r[P1@P2]).**.
14240 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
14250 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
14260 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
14270 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
14280 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
14290 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
142a0 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
142b0 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
142c0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
142d0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
142e0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
142f0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
14300 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
14310 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
14320 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
14330 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
14340 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
14350 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
14360 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14370 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
14380 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20  */.  char cAff; 
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
143a0 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63   A single charac
143b0 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20  ter of affinity 
143c0 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
143d0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
143e0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
143f0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
14400 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e   zAffinity[pOp->
14410 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  p2]==0 );.  pIn1
14420 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
14430 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66  ];.  while( (cAf
14440 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  f = *(zAffinity+
14450 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  +))!=0 ){.    as
14460 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
14470 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  ->aMem[(p->nMem-
14480 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
14490 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
144a0 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
144b0 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
144c0 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e  y(pIn1, cAff, en
144d0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e  coding);.    pIn
144e0 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
144f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14500 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
14510 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
14520 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
14530 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
14540 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
14550 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
14560 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
14570 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
14580 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
14590 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
145a0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
145b0 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
145c0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
145d0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
145e0 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
145f0 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
14600 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
14610 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
14620 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
14630 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  .  The nth chara
14640 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14650 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14660 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14670 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14680 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14690 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20  nth.** field of 
146a0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a  the index key..*
146b0 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67  *.** The mapping
146c0 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20   from character 
146d0 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67  to affinity is g
146e0 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49  iven by the SQLI
146f0 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f  TE_AFF_.** macro
14700 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c  s defined in sql
14710 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20  iteInt.h..**.** 
14720 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68  If P4 is NULL th
14730 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65  en all index fie
14740 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66  lds have the aff
14750 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63  inity NONE..*/.c
14760 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  ase OP_MakeRecor
14770 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52  d: {.  u8 *zNewR
14780 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a  ecord;        /*
14790 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c   A buffer to hol
147a0 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74  d the data for t
147b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
147c0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
147d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
147e0 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
147f0 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
14800 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14810 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
14820 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
14830 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
14840 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14850 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
14860 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
14870 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
14880 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
14890 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
148a0 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
148b0 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
148c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
148d0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
148e0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
148f0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14900 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
14910 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14920 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
14930 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
14940 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
14950 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
14960 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
14970 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
14980 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
14990 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
149a0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
149b0 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
149c0 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
149d0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
149e0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
149f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14a00 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14a10 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
14a20 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
14a30 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
14a40 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
14a50 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
14a60 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
14a70 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
14a80 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
14a90 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
14aa0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
14ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
14ac0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
14ad0 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a  ecord[] header *
14ae0 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
14af0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14b00 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14b10 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74  Record[] content
14b20 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14b40 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
14b50 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
14b60 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
14b70 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
14b80 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
14b90 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
14ba0 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
14bb0 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
14bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14be0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bf0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
14c00 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
14c10 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
14c20 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
14c30 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
14c40 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
14c50 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
14c60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c90 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
14ca0 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
14cb0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
14cc0 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
14cd0 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
14ce0 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
14cf0 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a  d so forth..  **
14d00 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
14d10 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
14d20 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
14d30 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
14d40 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
14d50 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
14d60 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
14d70 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14d80 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
14d90 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
14da0 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
14db0 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
14dc0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
14dd0 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
14de0 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
14df0 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
14e00 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
14e10 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14e20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
14e30 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
14e40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14e50 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14e60 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
14e70 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
14e80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
14e90 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
14ea0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
14eb0 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
14ec0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
14ed0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
14ee0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
14ef0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
14f00 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
14f10 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  eld<=(p->nMem-p-
14f20 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
14f30 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
14f40 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
14f50 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
14f60 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
14f70 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
14f80 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
14f90 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
14fa0 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
14fb0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
14fc0 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
14fd0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
14fe0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
14ff0 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
15000 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
15010 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
15020 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
15030 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
15040 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
15050 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
15060 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
15070 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
15080 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
15090 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
150a0 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
150b0 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
150c0 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
150d0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
150e0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
150f0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15100 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
15110 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
15120 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
15130 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f  y[0] );.  }..  /
15140 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74  * Loop through t
15150 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74  he elements that
15160 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68   will make up th
15170 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75  e record to figu
15180 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20  re.  ** out how 
15190 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65  much space is re
151a0 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e  quired for the n
151b0 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a  ew record..  */.
151c0 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a    pRec = pLast;.
151d0 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
151e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
151f0 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e  c) );.    pRec->
15200 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74  uTemp = serial_t
15210 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
15220 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
15230 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
15240 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
15250 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15260 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15270 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
15280 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
15290 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61  ){.      if( nDa
152a0 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ta ){.        sq
152b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
152c0 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
152d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
152e0 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
152f0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
15300 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e     len -= pRec->
15310 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d  u.nZero;.      }
15320 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61  .    }.    nData
15330 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73   += len;.    tes
15340 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
15350 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74  pe==127 );.    t
15360 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
15370 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20  type==128 );.   
15380 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f   nHdr += serial_
15390 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20  type<=127 ? 1 : 
153a0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
153b0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
153c0 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63   }while( (--pRec
153d0 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20  )>=pData0 );..  
153e0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
153f0 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68  R-22564-11647 Th
15400 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
15410 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
15420 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20  rint.  ** which 
15430 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74  determines the t
15440 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
15450 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64  ytes in the head
15460 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20  er. The varint. 
15470 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65   ** value is the
15480 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
15490 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63  der in bytes inc
154a0 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
154b0 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65  varint.  ** itse
154c0 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73  lf. */.  testcas
154d0 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a  e( nHdr==126 );.
154e0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
154f0 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e  ==127 );.  if( n
15500 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20  Hdr<=126 ){.    
15510 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  /* The common ca
15520 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b  se */.    nHdr +
15530 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
15540 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f    /* Rare case o
15550 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65  f a really large
15560 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e   header */.    n
15570 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
15580 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
15590 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  .    nHdr += nVa
155a0 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56  rint;.    if( nV
155b0 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
155c0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e  intLen(nHdr) ) n
155d0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
155e0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b  te = nHdr+nData;
155f0 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
15600 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
15610 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
15620 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
15630 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
15640 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
15650 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
15660 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
15670 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
15680 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
15690 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
156a0 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
156b0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
156c0 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
156d0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
156e0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
156f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
15700 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
15710 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
15720 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
15730 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
15740 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
15750 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
15760 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
15770 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
15780 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
15790 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
157a0 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
157b0 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
157c0 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
157d0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
157e0 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
157f0 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
15800 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
15810 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
15820 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
15830 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
15840 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
15850 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
15860 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
15870 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
15880 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
15890 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
158a0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
158b0 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
158c0 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
158d0 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
158e0 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
158f0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
15900 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
15910 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
15920 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
15930 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
15940 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
15950 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
15960 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
15970 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
15980 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
15990 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
159a0 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
159b0 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
159c0 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
159d0 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
159e0 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
159f0 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
15a00 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
15a10 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
15a20 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
15a30 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
15a40 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
15a50 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
15a60 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
15a70 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
15a80 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
15a90 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
15aa0 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
15ab0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
15ac0 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
15ad0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
15ae0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
15af0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
15b00 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
15b10 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
15b20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
15b30 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
15b40 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
15b50 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
15b60 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15b70 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
15b80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
15b90 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
15ba0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
15bb0 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
15bc0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
15bd0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
15be0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
15bf0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
15c00 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
15c10 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
15c20 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
15c30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15c40 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
15c50 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
15c60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
15c70 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
15c80 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
15c90 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
15ca0 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
15cb0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
15cc0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
15cd0 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
15ce0 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
15cf0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
15d00 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
15d10 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
15d20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
15d30 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
15d40 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  try);.  pOut->u.
15d50 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
15d60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
15d70 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
15d80 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
15d90 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
15da0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
15db0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
15dc0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
15dd0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
15de0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
15df0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
15e00 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
15e10 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
15e20 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
15e30 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15e40 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
15e50 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
15e60 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
15e70 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
15e80 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
15e90 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
15ec0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
15ed0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15ef0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
15f00 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
15f10 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
15f20 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
15f30 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
15f40 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
15f50 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
15f60 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
15f70 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
15f80 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
15f90 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
15fa0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
15fb0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
15fc0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
15fd0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
15fe0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
15ff0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
16000 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
16010 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
16020 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
16030 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
16040 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
16050 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
16060 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
16070 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16080 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
16090 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
160a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
160b0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
160c0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
160d0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
160e0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
160f0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
16100 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
16110 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
16120 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16130 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
16140 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
16150 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
16160 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
16170 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
16180 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
16190 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
161a0 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
161b0 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
161c0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
161d0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
161e0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
161f0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16200 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16210 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
16220 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
16230 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
16240 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
16250 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
16260 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
16270 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
16280 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
16290 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
162a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
162b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
162c0 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
162d0 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
162e0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
162f0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
16300 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
16310 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
16320 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
16330 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
16340 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
16350 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
16360 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
16370 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
16380 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
16390 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
163a0 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
163b0 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
163c0 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
163d0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
163e0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
163f0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
16400 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
16410 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
16420 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
16430 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
16460 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
16470 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
16480 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16490 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
164a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
164b0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
164c0 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
164d0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
164e0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
164f0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
16500 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
16510 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
16520 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
16530 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
16540 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
16550 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
16560 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
16570 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
16580 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
16590 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
165a0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
165b0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
165c0 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
165d0 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
165e0 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
165f0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
16600 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
16610 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
16620 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
16630 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
16640 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
16650 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16660 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
16670 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
16680 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
16690 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
166a0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e   .        /* Lin
166b0 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
166c0 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
166d0 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
166e0 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
166f0 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
16700 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
16710 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
16720 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
16730 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16740 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
16750 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16760 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
16770 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
16780 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
16790 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
167a0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
167b0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
167c0 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
167d0 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
167e0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
167f0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
16800 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
16810 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
16820 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
16830 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
16840 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16850 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16860 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
16870 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
16880 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
16890 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
168a0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
168b0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
168c0 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
168d0 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
168e0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
168f0 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
16900 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16910 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16920 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73  , db, "no such s
16930 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
16940 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
16950 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
16960 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
16970 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
16980 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16990 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
169a0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
169b0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
169c0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
169d0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
169e0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
169f0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
16a00 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
16a10 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16a20 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16a30 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
16a40 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
16a50 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
16a60 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
16a70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29  rogress".      )
16a80 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16a90 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
16aa0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
16ab0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
16ac0 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
16ad0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
16ae0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
16af0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
16b00 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
16b10 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
16b20 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
16b30 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
16b40 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
16b50 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
16b60 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
16b70 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16b80 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
16b90 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16ba0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
16bb0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
16bc0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16bd0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
16be0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
16bf0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
16c00 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
16c10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
16c20 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16c30 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16c40 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16c50 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
16c60 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
16c70 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
16c80 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
16c90 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
16ca0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16cb0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
16cc0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
16cd0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16ce0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
16cf0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
16d00 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
16d10 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16d20 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
16d30 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
16d40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16d50 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43     int isSchemaC
16d60 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69  hange;.        i
16d70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
16d80 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61  nSavepoint - iSa
16d90 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20  vepoint - 1;.   
16da0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
16db0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
16dc0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  ){.          isS
16dd0 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64  chemaChange = (d
16de0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
16df0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
16e00 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66  !=0;.          f
16e10 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
16e20 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
16e30 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16e40 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c  ite3BtreeTripAll
16e50 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b  Cursors(db->aDb[
16e60 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20  ii].pBt,.       
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
16ea0 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20  LBACK,.         
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
16ed0 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29  SchemaChange==0)
16ee0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
16ef0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
16f00 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
16f10 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16f20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
16f30 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
16f40 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
16f50 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
16f60 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
16f70 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
16f80 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
16f90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
16fa0 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
16fb0 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
16fc0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
16fd0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16fe0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
16ff0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
17000 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17010 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17020 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
17030 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29  isSchemaChange )
17040 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
17050 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
17060 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
17070 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
17080 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
17090 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
170a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
170b0 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c  >flags = (db->fl
170c0 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74  ags | SQLITE_Int
170d0 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20  ernChanges);.   
170e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
170f0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
17100 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
17110 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
17120 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
17130 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
17140 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
17150 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
17160 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
17170 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
17180 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
17190 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
171a0 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
171b0 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
171c0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
171d0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
171e0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
171f0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
17200 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
17210 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
17220 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
17230 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
17240 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
17250 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
17260 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
17270 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
17280 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
17290 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
172a0 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
172b0 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
172c0 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
172d0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
172e0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
172f0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
17300 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
17310 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
17320 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
17330 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
17340 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
17350 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
17360 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
17370 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
17380 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
17390 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
173a0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
173b0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
173c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
173d0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
173e0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
173f0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
17400 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
17410 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
17420 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17440 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
17450 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
17460 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
17470 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
17480 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
17490 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
174a0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
174b0 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
174c0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
174d0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
174e0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
174f0 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
17500 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
17510 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17520 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17530 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17540 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
17550 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
17560 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
17570 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
17580 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
17590 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
175a0 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
175b0 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
175c0 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
175d0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
175e0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
175f0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
17600 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
17610 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
17620 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
17630 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
17640 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
17650 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
17660 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
17670 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
17680 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
17690 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
176a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
176b0 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
176c0 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
176d0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
176e0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
176f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
17700 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
17710 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
17720 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
17730 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
17740 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
17750 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
17760 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
17770 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
17780 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
17790 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
177a0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
177b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
177c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
177d0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
177e0 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
177f0 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
17800 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
17810 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  e>0 );  /* At le
17820 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
17830 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61  is active */.  a
17840 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
17850 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20  der );..#if 0.  
17860 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
17870 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
17880 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20 29  >nVdbeActive>1 )
17890 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
178a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
178b0 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
178c0 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
178d0 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
178e0 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
178f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17900 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
17910 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
17920 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
17930 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17940 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17950 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17960 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17970 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
17980 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
17990 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
179a0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
179b0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
179c0 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
179d0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
179e0 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69  }else.#endif.  i
179f0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
17a00 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
17a10 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
17a20 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
17a30 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
17a40 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
17a50 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
17a60 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a  e writing.    **
17a70 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
17a80 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
17a90 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
17aa0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
17ab0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
17ac0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
17ad0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
17ae0 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
17af0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
17b00 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
17b10 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
17b20 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
17b30 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17b40 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
17b50 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
17b60 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
17b70 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
17b80 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
17b90 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
17ba0 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
17bb0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
17bc0 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
17bd0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
17be0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17bf0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
17c00 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
17c10 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
17c20 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
17c30 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
17c40 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17c50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
17c60 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
17c70 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
17c80 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20  mmit;.      if( 
17c90 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
17ca0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
17cb0 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
17cc0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64   = pc;.        d
17cd0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17ce0 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
17cf0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
17d00 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
17d10 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
17d20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17d30 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
17d40 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
17d50 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
17d60 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
17d70 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
17d80 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
17d90 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
17da0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
17db0 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
17dc0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
17dd0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
17de0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
17df0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
17e00 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  e{.    sqlite3Se
17e10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
17e20 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20  Msg, db,.       
17e30 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
17e40 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
17e50 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
17e60 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
17e70 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
17e80 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
17e90 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
17ea0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
17eb0 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17ed0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
17ee0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
17ef0 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
17f00 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
17f10 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
17f20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17f30 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
17f40 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
17f50 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
17f60 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
17f70 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
17f80 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
17f90 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
17fa0 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
17fb0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
17fc0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
17fd0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
17fe0 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
17ff0 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
18000 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
18010 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
18020 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
18030 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
18040 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
18050 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
18060 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
18070 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
18080 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
18090 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
180a0 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
180b0 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
180c0 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
180d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
180e0 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
180f0 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
18100 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
18110 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
18120 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
18130 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
18140 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
18150 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
18160 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18170 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
18180 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
18190 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
181a0 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
181b0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
181c0 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
181d0 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
181e0 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
181f0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
18200 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
18210 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18220 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
18230 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
18240 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
18250 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18260 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
18270 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
18280 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
18290 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
182a0 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
182b0 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
182c0 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
182d0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
182e0 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
182f0 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
18300 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
18310 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
18320 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
18330 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
18340 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
18350 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
18360 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
18370 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
18380 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
18390 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
183a0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
183b0 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
183c0 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
183d0 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
183e0 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
183f0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
18400 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
18410 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
18420 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
18430 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
18440 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
18450 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
18460 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
18470 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
18480 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
18490 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
184a0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
184b0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
184c0 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
184d0 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
184e0 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
184f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
18500 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
18510 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
18520 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
18530 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
18540 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
18550 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
18560 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
18570 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
18580 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
18590 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
185a0 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
185b0 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
185c0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
185d0 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
185e0 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
185f0 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
18600 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
18610 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
18620 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
18630 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
18640 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
18650 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
18660 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
18670 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
18680 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
18690 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
186a0 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
186b0 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20  ;.  int iGen;.. 
186c0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
186d0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
186e0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
186f0 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
18700 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
18710 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
18720 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
18730 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
18740 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
18750 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69   pOp->p1) );.  i
18760 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64  f( pOp->p2 && (d
18770 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
18780 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20  E_QueryOnly)!=0 
18790 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
187a0 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20  TE_READONLY;.   
187b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
187c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
187d0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
187e0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
187f0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
18800 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
18810 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
18820 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28  Op->p2);.    if(
18830 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
18840 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
18850 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72  = pc;.      p->r
18860 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
18870 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
18880 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18890 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
188a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
188b0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
188c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
188d0 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  }..    if( pOp->
188e0 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d  p2 && p->usesStm
188f0 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26  tJournal .     &
18900 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & (db->autoCommi
18910 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  t==0 || db->nVdb
18920 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b  eRead>1) .    ){
18930 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
18940 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
18950 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
18960 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65     if( p->iState
18970 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ment==0 ){.     
18980 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
18990 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20  Statement>=0 && 
189a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d  db->nSavepoint>=
189b0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  0 );.        db-
189c0 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
189d0 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74          p->iStat
189e0 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
189f0 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
18a00 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d  atement;.      }
18a10 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ..      rc = sql
18a20 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
18a30 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
18a40 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65  BEGIN, p->iState
18a50 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69  ment-1);.      i
18a60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
18a70 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18a80 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
18a90 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
18aa0 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20  Statement);.    
18ab0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74    }..      /* St
18ac0 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ore the current 
18ad0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
18ae0 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65  abase handles de
18af0 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
18b00 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74  t.      ** count
18b10 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74 65  er. If the state
18b20 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18b30 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
18b40 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20  led back,.      
18b50 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
18b60 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65  this counter nee
18b70 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65  ds to be restore
18b80 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20  d too.  */.     
18b90 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73   p->nStmtDefCons
18ba0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
18bb0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e  Cons;.      p->n
18bc0 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d  StmtDefImmCons =
18bd0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
18be0 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20  mCons;.    }..  
18bf0 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20    /* Gather the 
18c00 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
18c10 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69  umber for checki
18c20 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ng */.    sqlite
18c30 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
18c40 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  t, BTREE_SCHEMA_
18c50 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29  VERSION, (u32 *)
18c60 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65  &iMeta);.    iGe
18c70 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  n = db->aDb[pOp-
18c80 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47  >p1].pSchema->iG
18c90 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c  eneration;.  }el
18ca0 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69  se{.    iGen = i
18cb0 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Meta = 0;.  }.  
18cc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
18cd0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  =0 || pOp->p4typ
18ce0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
18cf0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20   if( pOp->p5 && 
18d00 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20  (iMeta!=pOp->p3 
18d10 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34  || iGen!=pOp->p4
18d20 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  .i) ){.    sqlit
18d30 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
18d40 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
18d50 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
18d60 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22  e3DbStrDup(db, "
18d70 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
18d80 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20  has changed");. 
18d90 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68     /* If the sch
18da0 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20  ema-cookie from 
18db0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
18dc0 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f  e matches the co
18dd0 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f  okie .    ** sto
18de0 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d  red with the in-
18df0 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74  memory represent
18e00 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68  ation of the sch
18e10 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e  ema, do.    ** n
18e20 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  ot reload the sc
18e30 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61  hema from the da
18e40 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
18e50 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69   **.    ** If vi
18e60 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65  rtual-tables are
18e70 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73   in use, this is
18e80 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74   not just an opt
18e90 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  imization..    *
18ea0 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65  * Often, v-table
18eb0 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61  s store their da
18ec0 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69  ta in other SQLi
18ed0 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68  te tables, which
18ee0 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72  .    ** are quer
18ef0 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ied from within 
18f00 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65  xNext() and othe
18f10 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  r v-table method
18f20 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70  s using.    ** p
18f30 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e  repared queries.
18f40 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79   If such a query
18f50 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c   is out-of-date,
18f60 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
18f70 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72  to.    ** discar
18f80 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
18f90 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73  chema, as the us
18fa0 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e  er code implemen
18fb0 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20  ting the.    ** 
18fc0 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61  v-table would ha
18fd0 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66  ve to be ready f
18fe0 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  or the sqlite3_v
18ff0 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74  tab structure it
19000 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62  self.    ** to b
19010 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  e invalidated wh
19020 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73  enever sqlite3_s
19030 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20  tep() is called 
19040 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20  from within .   
19050 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65   ** a v-table me
19060 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  thod..    */.   
19070 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70   if( db->aDb[pOp
19080 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  ->p1].pSchema->s
19090 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d  chema_cookie!=iM
190a0 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eta ){.      sql
190b0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
190c0 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ma(db, pOp->p1);
190d0 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78  .    }.    p->ex
190e0 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
190f0 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
19100 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
19110 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
19120 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
19130 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
19140 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
19150 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
19160 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
19170 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
19180 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
19190 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
191a0 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
191b0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
191c0 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
191d0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
191e0 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
191f0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
19200 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
19210 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
19220 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
19230 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
19240 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
19250 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19260 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
19270 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
19280 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
19290 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
192a0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
192b0 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
192c0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
192d0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
192e0 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
192f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19300 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
19310 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
19320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
19330 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
19340 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
19350 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
19360 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
19370 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19380 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
19390 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
193a0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
193b0 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
193c0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
193d0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
193e0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
193f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
19400 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
19410 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
19420 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
19430 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
19440 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
19450 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
19460 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
19470 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
19480 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
19490 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
194a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
194b0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
194c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
194d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
194e0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
194f0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
19500 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
19510 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
19520 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
19530 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
19540 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
19550 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
19560 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19570 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
19580 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
19590 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
195a0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
195b0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
195c0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
195d0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
195e0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
195f0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
19600 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19610 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
19620 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
19630 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
19640 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
19650 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
19660 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
19670 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
19680 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
19690 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
196a0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
196b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
196c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
196d0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
196e0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
196f0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
19700 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
19710 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
19720 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
19730 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19740 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
19750 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
19760 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
19770 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
19780 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
19790 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
197a0 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
197b0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
197c0 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
197d0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
197e0 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
197f0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
19800 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
19810 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
19820 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
19830 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
19840 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
19850 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
19860 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
19870 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
19880 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
19890 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
198a0 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
198b0 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
198c0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
198d0 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
198e0 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
198f0 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
19900 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
19910 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
19920 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
19930 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
19940 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
19950 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
19960 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
19970 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
19980 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
19990 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
199a0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
199b0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
199c0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
199d0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
199e0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
199f0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
19a00 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
19a10 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
19a20 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
19a30 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
19a40 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
19a50 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
19a60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19a70 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
19a80 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
19a90 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
19aa0 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
19ab0 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
19ac0 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
19ad0 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
19ae0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
19af0 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
19b00 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
19b10 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
19b20 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
19b30 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
19b40 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
19b50 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
19b60 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
19b70 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
19b80 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
19b90 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
19ba0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
19bb0 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
19bc0 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
19bd0 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
19be0 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
19bf0 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
19c00 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
19c10 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
19c20 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
19c30 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
19c40 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
19c50 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
19c60 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
19c70 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
19c80 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
19c90 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
19ca0 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
19cb0 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
19cc0 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
19cd0 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
19ce0 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
19cf0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
19d00 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
19d10 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
19d20 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
19d30 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
19d40 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
19d50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19d60 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
19d70 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
19d80 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
19d90 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
19da0 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
19db0 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
19dc0 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
19dd0 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
19de0 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
19df0 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
19e00 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
19e10 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
19e20 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
19e30 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
19e40 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
19e50 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
19e60 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
19e70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
19e80 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
19e90 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
19ea0 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
19eb0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
19ec0 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
19ed0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
19ee0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
19ef0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
19f00 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
19f10 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
19f20 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
19f30 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
19f40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
19f50 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
19f60 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
19f70 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
19f80 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
19f90 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
19fa0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
19fb0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
19fc0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
19fd0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
19fe0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
19ff0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1a000 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1a010 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1a020 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a030 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70   OpenWrite, Reop
1a040 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  enIdx.*/./* Opco
1a050 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31  de: ReopenIdx P1
1a060 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1a070 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a080 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54  2 iDb=P3.**.** T
1a090 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1a0a0 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ode works exactl
1a0b0 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20  y like ReadOpen 
1a0c0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1a0d0 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1a0e0 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1a0f0 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1a100 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61  eady open with a
1a110 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75   root page.** nu
1a120 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69  mber of P2 and i
1a130 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63  f it is this opc
1a140 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f  ode becomes a no
1a150 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  -op.  In other w
1a160 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20  ords,.** if the 
1a170 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
1a180 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72  y open, do not r
1a190 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  eopen it..**.** 
1a1a0 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1a1b0 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65  code may only be
1a1c0 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30   used with P5==0
1a1d0 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69   and with P4 bei
1a1e0 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e  ng.** a P4_KEYIN
1a1f0 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1a200 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1a210 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68  value must be th
1a220 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65  e same as.** eve
1a230 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1a240 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1a250 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1a260 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  or number..**.**
1a270 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61   See the OpenRea
1a280 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e  d opcode documen
1a290 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
1a2a0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1a2b0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
1a2c0 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
1a2d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1a2e0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1a2f0 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1a300 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
1a310 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
1a320 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a330 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
1a340 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
1a350 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
1a360 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1a370 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
1a380 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
1a390 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
1a3a0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1a3b0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1a3c0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1a3d0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1a3e0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1a3f0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1a400 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1a410 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1a420 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1a430 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1a440 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1a450 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1a460 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1a470 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1a480 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1a490 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1a4a0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1a4b0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1a4c0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1a4d0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1a4e0 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
1a4f0 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
1a500 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
1a510 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1a520 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
1a530 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
1a540 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
1a550 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
1a560 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1a570 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
1a580 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
1a590 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
1a5a0 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
1a5b0 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
1a5c0 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
1a5d0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
1a5e0 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
1a5f0 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
1a600 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
1a610 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
1a620 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
1a630 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 56 64 62  openIdx: {.  Vdb
1a640 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
1a650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a660 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  5==0 );.  assert
1a670 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a680 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1a690 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1a6a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1a6b0 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1a6c0 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1a6d0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1a6e0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1a6f0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1a700 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1a710 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1a720 72 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a  r */.    break;.
1a730 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1a740 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1a750 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1a760 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1a770 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1a780 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1a790 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1a7a0 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1a7b0 20 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73   reopen */.}.cas
1a7c0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1a7d0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1a7e0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
1a7f0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1a800 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
1a810 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a820 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
1a830 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
1a840 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
1a850 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pDb;..  assert(
1a860 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41   (pOp->p5&(OPFLA
1a870 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47  G_P2ISREG|OPFLAG
1a880 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d  _BULKCSR))==pOp-
1a890 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p5 );.  assert(
1a8a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1a8b0 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
1a8c0 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p5==0 );.  as
1a8d0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a8e0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1a8f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1a900 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d  OpenRead || pOp-
1a910 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70  >opcode==OP_Reop
1a920 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20  enIdx.          
1a930 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  || p->readOnly==
1a940 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  0 );..  if( p->e
1a950 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63  xpired ){.    rc
1a960 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f   = SQLITE_ABORT_
1a970 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72  ROLLBACK;.    br
1a980 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  eak;.  }..  nFie
1a990 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
1a9a0 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
1a9b0 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
1a9c0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1a9d0 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1a9e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a9f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1aa00 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1aa10 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  Db) );.  pDb = &
1aa20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
1aa30 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
1aa40 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
1aa50 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1aa60 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1aa70 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
1aa80 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
1aa90 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1aaa0 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1aab0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1aac0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1aad0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1aae0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1aaf0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1ab00 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1ab10 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1ab20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1ab30 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1ab40 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1ab50 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1ab60 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1ab70 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1ab80 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1ab90 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
1aba0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1abb0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1abc0 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
1abd0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
1abe0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1abf0 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
1ac00 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
1ac10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1ac20 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
1ac30 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
1ac40 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
1ac50 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
1ac60 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
1ac70 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
1ac80 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
1ac90 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
1aca0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1acb0 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
1acc0 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
1acd0 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
1ace0 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
1acf0 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
1ad00 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
1ad10 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
1ad20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
1ad30 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
1ad40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1ad50 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
1ad60 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
1ad70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1ad80 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1ad90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ada0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1adb0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1adc0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1add0 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1ade0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1adf0 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1ae00 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1ae10 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1ae20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1ae30 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1ae40 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1ae50 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1ae60 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1ae70 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1ae80 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1ae90 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1aea0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1aeb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1aec0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1aed0 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1aee0 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1aef0 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1af00 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1af10 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1af20 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1af30 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1af40 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1af50 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1af60 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1af70 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1af80 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1af90 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1afa0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1afb0 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1afc0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1afd0 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1afe0 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1aff0 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
1b000 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1b010 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1b020 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  o;.  assert( OPF
1b030 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1b040 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1b050 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b060 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70  sorHints(pCur->p
1b070 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35  Cursor, (pOp->p5
1b080 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1b090 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74  R));..  /* Set t
1b0a0 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1b0b0 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1b0c0 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1b0d0 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1b0e0 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1b0f0 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1b100 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1b110 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1b120 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1b130 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1b140 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1b150 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1b160 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1b170 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1b180 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1b190 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1b1a0 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1b1b0 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
1b1c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b1d0 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
1b1e0 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50  ral P1 P2 * P4 P
1b1f0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  5.** Synopsis: n
1b200 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1b210 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1b220 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
1b230 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
1b240 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
1b250 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
1b260 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
1b270 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1b280 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
1b290 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
1b2a0 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
1b2b0 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
1b2c0 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
1b2d0 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
1b2e0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
1b2f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b300 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  n the ephemeral 
1b310 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1b320 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
1b330 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
1b340 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
1b350 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
1b360 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
1b370 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1b380 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
1b390 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1b3a0 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
1b3b0 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
1b3c0 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
1b3d0 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  ex..**.** The P5
1b3e0 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62   parameter can b
1b3f0 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20  e a mask of the 
1b400 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65  BTREE_* flags de
1b410 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65  fined.** in btre
1b420 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67  e.h.  These flag
1b430 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74  s control aspect
1b440 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69  s of the operati
1b450 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72  on of.** the btr
1b460 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f  ee.  The BTREE_O
1b470 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20  MIT_JOURNAL and 
1b480 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61  BTREE_SINGLE fla
1b490 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20  gs are.** added 
1b4a0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
1b4b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1b4c0 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32  nAutoindex P1 P2
1b4d0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
1b4e0 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1b4f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1b500 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  e works the same
1b510 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   as OP_OpenEphem
1b520 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a  eral.  It has a.
1b530 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ** different nam
1b540 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68  e to distinguish
1b550 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65   its use.  Table
1b560 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  s created using.
1b570 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ** by this opcod
1b580 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  e will be used f
1b590 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  or automatically
1b5a0 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65   created transie
1b5b0 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e  nt.** indices in
1b5c0 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20   joins..*/.case 
1b5d0 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  OP_OpenAutoindex
1b5e0 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  : .case OP_OpenE
1b5f0 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
1b600 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
1b610 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1b620 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f  fo;..  static co
1b630 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73  nst int vfsFlags
1b640 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
1b650 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
1b660 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b670 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
1b680 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
1b690 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
1b6a0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
1b6b0 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
1b6c0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
1b6d0 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61  RANSIENT_DB;.  a
1b6e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b6f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1b700 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1b710 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1b720 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b730 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1b740 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1b750 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1b760 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1b770 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1b780 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ral = 1;.  rc = 
1b790 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1b7a0 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1b7b0 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1b7e0 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1b7f0 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1b800 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1b810 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1b820 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1b830 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1b840 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1b850 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1b860 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b870 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1b880 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1b890 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1b8a0 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1b8b0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1b8c0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1b8d0 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1b8e0 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1b8f0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1b900 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1b910 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1b920 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1b930 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1b940 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1b950 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1b960 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1b970 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1b980 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b    */.    if( (pK
1b990 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1b9a0 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1b9b0 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1b9c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1b9d0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b9e0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1b9f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ba00 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1ba10 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1ba20 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1ba30 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1ba40 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1ba50 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1ba60 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1ba70 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1ba80 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1ba90 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1baa0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1bab0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1bac0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
1bad0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1bae0 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20   pKeyInfo;.     
1baf0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bb00 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1bb10 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b  pBt, pgno, 1, pK
1bb20 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75  eyInfo, pCx->pCu
1bb30 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
1bb40 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1bb50 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1bb60 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1bb70 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1bb80 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1bb90 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1bba0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1bbb0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1bbc0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1bbd0 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1bbe0 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1bbf0 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62  _UNORDERED);.  b
1bc00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1bc10 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
1bc20 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1bc30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1bc40 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1bc50 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1bc60 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1bc70 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1bc80 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1bc90 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1bca0 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1bcb0 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1bcc0 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1bcd0 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1bce0 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75  m..**.** If argu
1bcf0 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  ment P3 is non-z
1bd00 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64  ero, then it ind
1bd10 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20  icates that the 
1bd20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73  sorter may.** as
1bd30 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62  sume that a stab
1bd40 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72  le sort consider
1bd50 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33  ing the first P3
1bd60 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a   fields of each.
1bd70 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63  ** key is suffic
1bd80 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20  ient to produce 
1bd90 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73  the required res
1bda0 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ults..*/.case OP
1bdb0 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20  _SorterOpen: {. 
1bdc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1bdd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1bde0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1bdf0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1be00 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1be10 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1be20 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1be30 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1be40 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1be50 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1be60 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1be70 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1be80 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1be90 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
1bea0 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1beb0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1bec0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1bed0 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
1bee0 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
1bef0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1bf00 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1bf10 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a  ceTest P1 P2 * *
1bf20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1bf30 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63  if( cursor[P1].c
1bf40 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a  tr++ ) pc = P2.*
1bf50 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
1bf60 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74  ter cursor. If t
1bf70 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e  he sequence coun
1bf80 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
1bf90 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74   zero, jump.** t
1bfa0 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73  o P2. Regardless
1bfb0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
1bfc0 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
1bfd0 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20  aken, increment 
1bfe0 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65  the.** the seque
1bff0 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  nce value..*/.ca
1c000 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65  se OP_SequenceTe
1c010 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  st: {.  VdbeCurs
1c020 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1c030 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c040 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1c050 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1c060 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1c070 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53    assert( pC->pS
1c080 6f 72 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28  orter );.  if( (
1c090 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d  pC->seqCount++)=
1c0a0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
1c0b0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1c0c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c0d0 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1c0e0 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
1c0f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63  * Synopsis: P3 c
1c100 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a  olumns in r[P2].
1c110 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1c120 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
1c130 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
1c140 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1c150 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
1c160 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  w of data.  The 
1c170 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
1c180 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63  one row is the c
1c190 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  ontent of memory
1c1a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
1c1b0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1c1c0 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1c1d0 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1c1e0 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1c1f0 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1c200 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1c210 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  P2..**.** A pseu
1c220 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
1c230 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1c240 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
1c250 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1c260 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
1c270 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
1c280 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
1c290 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
1c2a0 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
1c2b0 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
1c2c0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
1c2d0 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
1c2e0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
1c2f0 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
1c300 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
1c310 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
1c320 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
1c330 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
1c340 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
1c350 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
1c360 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
1c370 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c380 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
1c390 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
1c3a0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1c3b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c3c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c3d0 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p3>=0 );.  pC
1c3e0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1c3f0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1c400 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a  Op->p3, -1, 0);.
1c410 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c420 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c430 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1c440 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
1c450 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1c460 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1c470 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
1c480 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1c490 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c4a0 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1c4b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1c4c0 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1c4d0 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1c4e0 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1c4f0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1c500 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1c510 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1c520 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1c530 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1c540 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c550 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c560 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1c570 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1c580 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1c590 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1c5a0 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1c5b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1c5c0 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50  : SeekGE P1 P2 P
1c5d0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1c5e0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1c5f0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1c600 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1c610 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1c620 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1c630 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1c640 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1c650 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1c660 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
1c670 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1c680 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1c690 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1c6a0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1c6b0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1c6c0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1c6d0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1c6e0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1c6f0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1c700 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1c710 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1c720 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1c730 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1c740 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1c750 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1c760 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1c770 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1c780 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
1c790 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1c7a0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1c7b0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1c7c0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1c7d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1c7e0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1c7f0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1c800 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1c810 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1c820 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1c830 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1c840 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1c850 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1c860 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1c870 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1c880 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1c890 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1c8a0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1c8b0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1c8c0 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1c8d0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1c8e0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c8f0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c900 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c910 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c920 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c930 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c940 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c950 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c960 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1c970 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1c980 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1c990 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1c9a0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1c9b0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1c9c0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1c9d0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1c9e0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1c9f0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1ca00 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1ca10 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1ca20 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1ca30 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ca40 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1ca50 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1ca60 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1ca70 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1ca80 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1ca90 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1caa0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1cab0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1cac0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1cad0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1cae0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1caf0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1cb00 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1cb10 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1cb20 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1cb30 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1cb40 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1cb50 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1cb60 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1cb70 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1cb80 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1cb90 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1cba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1cbb0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1cbc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1cbd0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1cbe0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1cbf0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1cc00 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1cc10 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1cc20 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1cc30 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1cc40 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1cc50 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1cc60 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1cc70 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1cc80 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1cc90 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1cca0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1ccb0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1ccc0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1ccd0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1cce0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1ccf0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1cd00 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1cd10 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1cd20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1cd30 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1cd40 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1cd50 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1cd60 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1cd70 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1cd80 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1cd90 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1cda0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1cdb0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1cdc0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1cdd0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1cde0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1cdf0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1ce00 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1ce10 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1ce20 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1ce30 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1ce40 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1ce50 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1ce60 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1ce70 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1ce80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1ce90 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1cea0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1ceb0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1cec0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ced0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1cee0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1cef0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1cf00 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1cf10 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1cf20 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1cf30 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1cf40 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1cf50 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1cf60 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1cf70 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1cf80 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1cf90 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1cfa0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1cfb0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1cfc0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1cfd0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1cfe0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1cff0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1d000 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1d010 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1d020 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1d030 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1d040 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1d050 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1d060 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1d070 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1d080 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1d090 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1d0a0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1d0b0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1d0c0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1d0d0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1d0e0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1d0f0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1d100 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1d110 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1d120 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1d130 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1d140 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1d150 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1d160 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1d170 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1d180 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1d190 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d1a0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1d1b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d1c0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1d1d0 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1d1e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d1f0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1d200 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1d210 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1d220 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1d230 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d240 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1d250 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1d260 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1d270 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1d280 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1d290 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1d2a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1d2b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1d2c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1d2d0 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1d2e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d2f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1d300 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1d310 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1d320 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1d330 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1d340 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1d350 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1d360 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1d370 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1d380 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1d390 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1d3a0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1d3b0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1d3c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1d3d0 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1d3e0 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75  opcode;.  pC->nu
1d3f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
1d400 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d410 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1d420 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1d430 66 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  f.  if( pC->isTa
1d440 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
1d450 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1d460 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1d470 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1d480 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1d490 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
1d4a0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1d4b0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1d4c0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1d4d0 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
1d4e0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
1d4f0 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
1d500 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1d510 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
1d520 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
1d530 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
1d540 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
1d550 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
1d560 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1d570 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
1d580 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1d590 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1d5a0 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  n3);..    /* If 
1d5b0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1d5c0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1d5d0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1d5e0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1d5f0 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1d600 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1d610 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1d620 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1d630 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
1d640 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1d650 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
1d660 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d670 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1d680 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
1d690 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1d6a0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1d6b0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1d6c0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1d6d0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1d6e0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1d6f0 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1d700 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 63  P2 */.        pc
1d710 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
1d720 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1d730 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 62  (1,2);.        b
1d740 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  reak;.      }.. 
1d750 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1d760 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1d770 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e  y is larger than
1d780 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1d790 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1d7a0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1d7b0 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c  e >= for > and <
1d7c0 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66   for <=. e.g. if
1d7d0 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d   the search term
1d7e0 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39  .      ** is 4.9
1d7f0 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72   and the integer
1d800 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35   approximation 5
1d810 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  :.      **.     
1d820 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20   **        (x > 
1d830 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1d840 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a  (x >= 5).      *
1d850 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34  *        (x <= 4
1d860 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
1d870 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a   <  5).      */.
1d880 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1d890 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r<(double)iKey
1d8a0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1d8b0 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28  rt( OP_SeekGE==(
1d8c0 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a  OP_SeekGT-1) );.
1d8d0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d8e0 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53  OP_SeekLT==(OP_S
1d8f0 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20  eekLE-1) );.    
1d900 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1d910 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29  SeekLE & 0x0001)
1d920 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
1d930 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1d940 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1d950 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1d960 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d  & 0x0001) ) oc--
1d970 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1d980 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
1d990 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
1d9a0 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68   smaller than th
1d9b0 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1d9c0 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1d9d0 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c  rm, substitute <
1d9e0 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f  = for < and > fo
1d9f0 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  r >=.  */.      
1da00 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75  else if( pIn3->u
1da10 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r>(double)iKey 
1da20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1da30 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f  t( OP_SeekLE==(O
1da40 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20  P_SeekLT+1) );. 
1da50 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1da60 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65  P_SeekGT==(OP_Se
1da70 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekGE+1) );.     
1da80 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
1da90 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d  eekLT & 0x0001)=
1daa0 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78  =(OP_SeekGE & 0x
1dab0 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
1dac0 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
1dad0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26  1)==(OP_SeekLT &
1dae0 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b   0x0001) ) oc++;
1daf0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a  .      }.    } .
1db00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1db10 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1db20 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1db30 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
1db40 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
1db50 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1db60 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
1db70 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
1db80 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1db90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1dba0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1dbb0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1dbc0 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64  else{.    nField
1dbd0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1dbe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1dbf0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1dc00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
1dc10 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
1dc20 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1dc30 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1dc40 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1dc50 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
1dc60 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1dc70 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1dc80 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1dc90 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
1dca0 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
1dcb0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1dcc0 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
1dcd0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
1dce0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
1dcf0 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
1dd00 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
1dd10 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
1dd20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
1dd30 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
1dd40 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
1dd50 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
1dd60 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1dd70 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
1dd80 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1dd90 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1dda0 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
1ddb0 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
1ddc0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1ddd0 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
1dde0 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
1ddf0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1de00 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
1de10 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
1de20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
1de30 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
1de40 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1de50 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1de60 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1de70 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1de80 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1de90 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1dea0 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  f.    ExpandBlob
1deb0 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63  (r.aMem);.    rc
1dec0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1ded0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1dee0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1def0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1df00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1df10 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1df20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1df30 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
1df40 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1df50 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1df60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1df70 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1df80 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1df90 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1dfa0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
1dfb0 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  f( oc>=OP_SeekGE
1dfc0 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1dfd0 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63  =OP_SeekGE || oc
1dfe0 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20  ==OP_SeekGT );. 
1dff0 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1e000 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1e010 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20  P_SeekGT) ){.   
1e020 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1e030 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e040 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72  reeNext(pC->pCur
1e050 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1e060 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e070 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1e080 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e090 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e0a0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
1e0b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1e0c0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1e0d0 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
1e0e0 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  LE );.    if( re
1e0f0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1e100 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29  & oc==OP_SeekLT)
1e110 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1e120 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
1e130 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1e140 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1e150 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1e160 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e170 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e180 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1e190 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
1e1a0 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1e1b0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1e1c0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1e1d0 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1e1e0 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1e1f0 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1e200 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
1e210 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1e220 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1e230 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1e240 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1e250 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1e260 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
1e270 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1e280 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e290 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1e2a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1e2b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1e2c0 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1e2d0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1e2e0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1e2f0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1e300 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1e310 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1e320 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1e330 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1e340 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1e350 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1e360 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1e370 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1e380 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1e390 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1e3a0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1e3b0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1e3c0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1e3d0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1e3e0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1e3f0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1e400 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1e410 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1e420 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1e430 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1e440 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1e450 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1e460 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1e470 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e480 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1e490 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e4a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1e4b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1e4c0 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1e4d0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1e4e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1e4f0 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1e500 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1e510 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1e520 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65  In2);.  pC->defe
1e530 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1e540 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1e550 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1e560 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e570 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e580 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e590 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1e5a0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1e5b0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1e5c0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1e5d0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1e5e0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1e5f0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1e600 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1e610 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1e620 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1e630 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e640 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e650 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e660 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e670 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1e680 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e690 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e6a0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e6b0 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1e6c0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1e6d0 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1e6e0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
1e6f0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1e700 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1e710 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1e720 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
1e730 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
1e740 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
1e750 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
1e760 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
1e770 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
1e780 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
1e790 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e7a0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1e7b0 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
1e7c0 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
1e7d0 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1e7e0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e7f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e800 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e810 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1e820 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1e830 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1e840 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1e850 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1e860 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1e870 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1e880 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1e890 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1e8a0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1e8b0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e8c0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e8d0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e8e0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e8f0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1e900 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1e910 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1e920 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1e930 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1e940 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1e950 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1e960 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1e970 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1e980 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1e990 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1e9a0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1e9b0 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1e9c0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1e9d0 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1e9e0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1e9f0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1ea00 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ea10 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1ea20 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
1ea30 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
1ea40 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1ea50 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1ea60 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1ea70 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
1ea80 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
1ea90 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
1eaa0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1eab0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1eac0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1ead0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
1eae0 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
1eaf0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1eb00 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1eb10 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1eb20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1eb30 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1eb40 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1eb50 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1eb60 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1eb70 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1eb80 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1eb90 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1eba0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1ebb0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1ebc0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1ebd0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1ebe0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1ebf0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1ec00 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
1ec10 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
1ec20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1ec30 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
1ec40 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
1ec50 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
1ec60 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
1ec70 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
1ec80 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
1ec90 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
1eca0 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
1ecb0 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
1ecc0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ecd0 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
1ece0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
1ecf0 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
1ed00 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
1ed10 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
1ed20 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
1ed30 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
1ed40 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
1ed50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ed60 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
1ed70 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
1ed80 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
1ed90 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
1eda0 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
1edb0 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
1edc0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
1edd0 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
1ede0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1edf0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1ee00 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1ee10 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
1ee20 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
1ee30 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
1ee40 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
1ee50 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
1ee60 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
1ee70 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
1ee80 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
1ee90 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
1eea0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1eeb0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1eec0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
1eed0 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
1eee0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1eef0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1ef00 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1ef10 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1ef20 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1ef30 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1ef40 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1ef50 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
1ef60 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1ef70 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1ef80 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1ef90 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1efa0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1efb0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1efc0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1efd0 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1efe0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1eff0 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
1f000 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1f010 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f020 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
1f030 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
1f040 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1f050 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1f060 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f070 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f080 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f090 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1f0a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f0b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f0c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f0d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1f0e0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1f0f0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1f100 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
1f110 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1f120 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1f130 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1f140 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f150 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
1f160 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1f170 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1f180 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f  to suppress a co
1f190 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
1f1a0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
1f1b0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
1f1c0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1f1d0 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1f1e0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1f1f0 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
1f200 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72   = pIn3;.    for
1f210 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1f220 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1f230 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1f240 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
1f250 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64   );.      Expand
1f260 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  Blob(&r.aMem[ii]
1f270 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1f280 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28  _DEBUG.      if(
1f290 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
1f2a0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
1f2b0 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23   &r.aMem[ii]);.#
1f2c0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20  endif.    }.    
1f2d0 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1f2e0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
1f2f0 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1f300 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1f310 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
1f320 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1f330 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1f340 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1f350 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64    );.    if( pId
1f360 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  xKey==0 ) goto n
1f370 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
1f380 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1f390 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1f3a0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
1f3b0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1f3c0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
1f3d0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
1f3e0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
1f3f0 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
1f400 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
1f410 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  rc = 0;.  if( pO
1f420 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
1f430 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
1f440 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
1f450 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
1f460 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
1f470 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
1f480 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
1f490 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
1f4a0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
1f4b0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
1f4c0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
1f4d0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
1f4e0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
1f4f0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 2e 61  ){.      if( r.a
1f500 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
1f510 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1f520 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1f530 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e 63 68   - 1; VdbeBranch
1f540 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
1f550 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1f560 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
1f570 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1f580 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1f590 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
1f5a0 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
1f5b0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
1f5c0 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  i==0 ){.    sqli
1f5d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46  te3DbFree(db, pF
1f5e0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ree);.  }.  if( 
1f5f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1f600 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1f610 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1f620 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
1f630 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
1f640 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
1f650 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
1f660 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
1f670 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1f680 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1f690 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1f6a0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f6b0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
1f6c0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1f6d0 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1f6e0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
1f6f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1f700 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f710 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
1f720 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
1f730 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
1f740 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  2);.    if( !alr
1f750 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1f760 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1f770 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1f780 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
1f790 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
1f7a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
1f7b0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
1f7c0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
1f7d0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
1f7e0 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
1f7f0 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
1f800 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
1f810 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
1f820 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
1f830 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
1f840 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
1f850 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
1f860 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1f870 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64   to P2.  If P1 d
1f880 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
1f890 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77  cord.** with row
1f8a0 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65  id P3 then leave
1f8b0 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
1f8c0 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
1f8d0 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20  ord and fall.** 
1f8e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1f8f0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1f900 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
1f910 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
1f920 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
1f930 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
1f940 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
1f950 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
1f960 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
1f970 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1f980 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1f990 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1f9a0 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1f9b0 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
1f9c0 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1f9d0 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1f9e0 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1f9f0 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
1fa00 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
1fa10 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
1fa20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
1fa30 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1fa40 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1fa50 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  t.*/.case OP_Not
1fa60 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1fa70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1fa80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1fa90 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1faa0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1fab0 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1fac0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1fad0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1fae0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1faf0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1fb00 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1fb10 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1fb20 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1fb30 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1fb40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1fb50 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
1fb60 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1fb70 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
1fb80 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
1fb90 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1fba0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1fbb0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1fbc0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1fbd0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1fbe0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
1fbf0 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
1fc00 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
1fc10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1fc20 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1fc30 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1fc40 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  res);.  pC->move
1fc50 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
1fc60 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
1fc70 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e  Delete */.  pC->
1fc80 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1fc90 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1fca0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1fcb0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1fcc0 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
1fcd0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1fce0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  ,2);.  if( res!=
1fcf0 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1fd00 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1fd10 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1fd20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a  = res;.  break;.
1fd30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1fd40 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
1fd50 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1fd60 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
1fd70 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
1fd80 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1fd90 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1fda0 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1fdb0 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1fdc0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1fdd0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1fde0 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1fdf0 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1fe00 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1fe10 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1fe20 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1fe30 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1fe40 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1fe50 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1fe60 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1fe70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1fe80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1fe90 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1fea0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1feb0 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1fec0 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1fed0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1fee0 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1fef0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1ff00 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1ff10 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1ff20 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
1ff30 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1ff40 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1ff50 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1ff60 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1ff70 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1ff80 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1ff90 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1ffa0 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1ffb0 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1ffc0 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1ffd0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1ffe0 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1fff0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
20000 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
20010 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
20020 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
20030 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
20040 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
20050 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
20060 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
20070 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
20080 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
20090 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
200a0 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
200b0 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
200c0 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
200d0 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
200e0 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
200f0 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
20100 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
20110 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
20120 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
20130 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
20140 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
20150 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
20160 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
20170 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
20180 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
20190 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
201a0 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
201b0 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
201c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
201d0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
201e0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
201f0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b  ease */.  i64 v;
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20210 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
20220 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
20230 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
20240 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
20250 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
20260 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
20270 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
20280 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
20290 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
202a0 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
202b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
202c0 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
202d0 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
202e0 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
202f0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
20300 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20310 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
20320 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
20330 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
20340 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
20350 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
20360 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
20370 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
20380 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
20390 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
203a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
203b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
203c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
203d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
203e0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d  .  if( NEVER(pC-
203f0 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a  >pCursor==0) ){.
20400 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
20410 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
20420 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
20430 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
20440 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
20450 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
20460 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
20470 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
20480 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
20490 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
204a0 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
204b0 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
204c0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
204d0 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
204e0 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
204f0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
20500 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
20510 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
20520 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
20530 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
20540 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
20550 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
20560 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
20570 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
20580 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
20590 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
205a0 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
205b0 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
205c0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
205d0 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
205e0 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
205f0 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
20600 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
20610 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
20620 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
20630 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
20640 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
20650 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
20660 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
20670 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
20680 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
20690 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
206a0 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
206b0 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
206c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
206d0 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
206e0 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
206f0 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
20700 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
20710 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
20720 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
20730 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
20740 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
20750 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
20760 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
20770 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
20780 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
20790 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
207a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
207b0 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
207c0 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
207d0 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
207e0 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
207f0 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
20800 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
20810 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
20820 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
20830 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
20840 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
20850 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
20860 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
20870 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20880 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
20890 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
208a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
208b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
208c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
208d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
208e0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
208f0 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
20900 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
20910 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
20920 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20930 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
20940 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
20950 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  alid(pC->pCursor
20960 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
20970 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
20980 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
20990 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
209a0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
209b0 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
209c0 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
209d0 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
209e0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
209f0 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
20a00 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
20a10 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
20a20 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
20a30 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
20a40 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
20a50 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
20a60 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
20a70 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
20a80 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
20a90 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
20aa0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
20ab0 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20ac0 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20ad0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20ae0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20af0 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
20b00 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
20b10 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
20b20 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
20b30 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
20b40 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
20b50 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
20b60 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20b70 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20b80 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20b90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20ba0 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
20bb0 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
20bc0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
20bd0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
20be0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
20bf0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20c00 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
20c10 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
20c20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20c30 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
20c40 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
20c50 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
20c60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20c70 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
20c80 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
20c90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
20ca0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
20cb0 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
20cc0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
20cd0 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
20ce0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
20cf0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
20d00 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
20d10 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
20d20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
20d30 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
20d40 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
20d50 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
20d60 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
20d70 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
20d80 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
20d90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
20da0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
20db0 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
20dc0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20dd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20de0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
20df0 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
20e00 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
20e10 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
20e20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
20e30 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
20e40 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
20e50 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20e60 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
20e70 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
20e80 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
20e90 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
20ea0 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
20eb0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
20ec0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
20ed0 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
20ee0 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
20ef0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
20f00 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
20f10 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
20f20 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
20f30 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
20f40 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
20f50 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
20f60 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
20f70 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
20f80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20f90 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
20fa0 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
20fb0 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
20fc0 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fe0 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
20ff0 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
21000 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
21010 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
21020 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
21030 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
21040 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
21050 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
21060 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
21070 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
21080 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
21090 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
210a0 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
210b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
210c0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
210d0 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
21110 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
21120 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
21130 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
21140 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
21150 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20  nt<100));.      
21160 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21170 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
21180 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
21190 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
211a0 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32  P: R-38219-53002
211b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
211c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
211d0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
211e0 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29     assert( v>0 )
211f0 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31  ;  /* EV: R-4081
21200 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d  2-03570 */.    }
21210 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
21220 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
21230 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21240 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21250 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
21260 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
21270 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
21280 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
21290 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
212a0 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
212b0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
212c0 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
212d0 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
212e0 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
212f0 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
21300 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
21310 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
21320 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
21330 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
21340 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
21350 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
21360 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
21370 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
21380 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
21390 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
213a0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
213b0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
213c0 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
213d0 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
213e0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
213f0 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
21400 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
21410 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
21420 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
21430 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
21440 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
21450 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
21460 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
21470 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
21480 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
21490 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
214a0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
214b0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
214c0 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
214d0 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
214e0 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
214f0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
21500 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
21510 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
21520 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
21530 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
21540 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
21550 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
21560 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
21570 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
21580 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
21590 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
215a0 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
215b0 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
215c0 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
215d0 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
215e0 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
215f0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
21600 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
21610 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
21620 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
21630 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
21640 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
21650 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
21660 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
21670 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
21680 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
21690 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
216a0 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
216b0 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
216c0 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
216d0 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
216e0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
216f0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
21700 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
21710 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
21720 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
21730 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
21740 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
21750 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
21760 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
21770 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
21780 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
21790 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
217a0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
217b0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
217c0 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
217d0 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
217e0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
217f0 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
21800 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
21810 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
21820 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
21830 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
21840 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
21850 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
21860 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
21870 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
21880 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
21890 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
218a0 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
218b0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
218c0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
218d0 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
218e0 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
218f0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
21900 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
21910 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
21920 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
21930 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
21940 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
21950 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
21960 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
21970 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
21980 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
21990 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
219a0 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
219b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
219c0 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
219d0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
219e0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
219f0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
21a00 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
21a10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
21a20 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
21a30 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
21a40 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
21a50 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
21a60 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
21a70 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
21a80 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
21a90 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
21aa0 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
21ab0 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
21ac0 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
21ad0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21ae0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
21af0 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
21b00 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
21b10 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
21b20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
21b30 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
21b40 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21b50 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
21b60 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
21b70 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
21b80 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
21b90 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
21ba0 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
21bb0 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
21bc0 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
21bd0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21be0 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
21bf0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
21c00 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
21c10 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
21c20 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
21c30 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
21c40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21c50 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
21c60 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
21c70 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
21c80 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
21c90 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
21ca0 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
21cb0 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
21cc0 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
21cd0 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
21ce0 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
21cf0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
21d00 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
21d10 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
21d20 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
21d30 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
21d40 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
21d50 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
21d60 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
21d70 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
21d80 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
21d90 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
21da0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
21db0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21dc0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21dd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
21de0 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
21df0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21e00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21e10 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21e20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21e30 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
21e40 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
21e50 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
21e60 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
21e70 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ble );.  REGISTE
21e80 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
21e90 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
21ea0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21eb0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
21ec0 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
21ed0 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
21ee0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
21ef0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
21f00 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
21f10 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
21f20 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
21f30 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
21f40 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
21f50 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
21f60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
21f70 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
21f80 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
21f90 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
21fa0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21fb0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
21fc0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
21fd0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
21fe0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
21ff0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
22000 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
22010 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
22020 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
22030 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
22040 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
22050 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
22060 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
22070 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
22080 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
22090 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
220a0 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
220b0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
220c0 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
220d0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
220e0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
220f0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
22100 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
22110 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
22120 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
22130 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
22140 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
22150 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
22160 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
22190 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
221c0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d  OPFLAG_APPEND)!=
221d0 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  0, seekResult.  
221e0 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
221f0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
22200 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22210 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
22220 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
22230 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
22240 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
22250 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
22260 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
22270 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
22280 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20  .z ){.    zDb = 
22290 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
222a0 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c  .zName;.    zTbl
222b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
222c0 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35    op = ((pOp->p5
222d0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
222e0 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
222f0 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
22300 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ERT);.    assert
22310 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
22320 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
22330 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
22340 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62  dateArg, op, zDb
22350 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20  , zTbl, iKey);. 
22360 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22370 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62  Db>=0 );.  }.  b
22380 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22390 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32  de: Delete P1 P2
223a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   * P4 *.**.** De
223b0 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
223c0 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
223d0 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
223e0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
223f0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77  .** The cursor w
22400 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
22410 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74  ting at either t
22420 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
22430 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
22440 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
22450 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
22460 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
22470 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
22480 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
22490 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
224a0 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48  l be a no-op.  H
224b0 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f  ence it is OK to
224c0 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63   delete.** a rec
224d0 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
224e0 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  a Next loop..**.
224f0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
22500 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
22510 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
22520 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
22530 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
22540 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
22550 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
22560 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
22570 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
22580 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
22590 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
225a0 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
225b0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
225c0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69   NULL, then it i
225d0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
225e0 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20  e table that P1 
225f0 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  is.** pointing t
22600 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68  o.  The update h
22610 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
22620 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74  ked, if it exist
22630 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  s..** If P4 is n
22640 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  ot NULL then the
22650 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
22660 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
22670 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50  oned.** using OP
22680 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
22690 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
226a0 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
226b0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
226c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
226d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
226e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
226f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22700 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22710 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22720 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
22730 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
22740 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79  r!=0 );  /* Only
22750 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20   valid for real 
22760 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64  tables, no pseud
22770 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73  otables */.  ass
22780 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22790 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23  dMoveto==0 );..#
227a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
227b0 55 47 0a 20 20 2f 2a 20 54 68 65 20 73 65 65 6b  UG.  /* The seek
227c0 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20   operation that 
227d0 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
227e0 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 20 4f  ursor prior to O
227f0 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a 20 20  P_Delete will.  
22800 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74  ** have also set
22810 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   the pC->movetoT
22820 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74  arget field to t
22830 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
22840 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a 20 69 73  row that.  ** is
22850 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a   being deleted *
22860 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  /.  if( pOp->p4.
22870 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
22880 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b 65 79   ){.    i64 iKey
22890 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
228a0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
228b0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69 4b 65 79  ->pCursor, &iKey
228c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
228d0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
228e0 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d 0a 23 65  =iKey ); .  }.#e
228f0 6e 64 69 66 0a 20 0a 20 20 72 63 20 3d 20 73 71  ndif. .  rc = sq
22900 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
22910 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
22920 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
22930 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22940 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
22950 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
22960 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
22970 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22980 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
22990 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
229a0 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61  p4.z && pC->isTa
229b0 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  ble ){.    db->x
229c0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
229d0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
229e0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20  QLITE_DELETE,.  
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43        db->aDb[pC
22a10 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f  ->iDb].zName, pO
22a20 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76  p->p4.z, pC->mov
22a30 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
22a40 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
22a50 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =0 );.  }.  if( 
22a60 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
22a70 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
22a80 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b  hange++;.  break
22a90 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
22aa0 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
22ab0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
22ac0 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
22ad0 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
22ae0 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
22af0 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
22b00 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
22b10 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
22b20 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
22b30 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
22b40 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
22b50 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
22b60 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
22b70 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
22b80 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
22b90 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
22ba0 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
22bb0 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
22bc0 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
22bd0 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
22be0 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
22bf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22c00 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
22c10 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
22c20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
22c30 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
22c40 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
22c50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
22c60 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
22c70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
22c80 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
22c90 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
22ca0 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
22cb0 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
22cc0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
22cd0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
22ce0 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
22cf0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
22d00 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
22d10 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
22d20 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
22d30 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
22d40 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
22d50 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
22d60 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
22d70 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
22d80 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
22d90 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
22da0 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
22db0 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
22dc0 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
22dd0 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
22de0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
22df0 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
22e00 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
22e10 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
22e20 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
22e30 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
22e40 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
22e50 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
22e60 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
22e70 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
22e80 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
22e90 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
22ea0 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
22eb0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
22ec0 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
22ed0 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
22ee0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22ef0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
22f00 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
22f10 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
22f20 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
22f30 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
22f40 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
22f50 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
22f60 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
22f70 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
22f80 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
22f90 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
22fa0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
22fb0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
22fc0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
22fd0 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
22fe0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a   }.  break;.};..
22ff0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
23000 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  rData P1 P2 P3 *
23010 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
23020 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
23030 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
23040 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
23050 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
23060 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
23070 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c  r P1..** Then cl
23080 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ear the column h
23090 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63  eader cache on c
230a0 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ursor P3..**.** 
230b0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  This opcode is n
230c0 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d  ormally use to m
230d0 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74  ove a record out
230e0 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61   of the sorter a
230f0 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67  nd into.** a reg
23100 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68  ister that is th
23110 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70  e source for a p
23120 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
23130 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  or created using
23140 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20  .** OpenPseudo. 
23150 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62   That pseudo-tab
23160 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65  le cursor is the
23170 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65   one that is ide
23180 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61  ntified by.** pa
23190 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65  rameter P3.  Cle
231a0 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c  aring the P3 col
231b0 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72  umn cache as par
231c0 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  t of this opcode
231d0 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f   saves.** us fro
231e0 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75  m having to issu
231f0 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c  e a separate Nul
23200 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e  lRow instruction
23210 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63   to clear that c
23220 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ache..*/.case OP
23230 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
23240 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23250 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
23260 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
23270 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23280 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
23290 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
232a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
232b0 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
232c0 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
232d0 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
232e0 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
232f0 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
23300 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23310 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23320 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23330 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
23340 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  ]->cacheStatus =
23350 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
23360 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23370 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
23380 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23390 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
233a0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
233b0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
233c0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
233d0 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
233e0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
233f0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
23400 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
23410 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
23420 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
23430 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
23440 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
23450 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
23460 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
23470 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
23480 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
23490 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
234a0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
234b0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
234c0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
234d0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
234e0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
234f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
23500 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b  ynopsis: r[P2]=k
23510 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ey.**.** Write i
23520 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
23530 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
23540 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
23550 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
23560 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
23570 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
23580 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63  .** The key is c
23590 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
235a0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
235b0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
235c0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
235d0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
235e0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
235f0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
23600 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
23610 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
23620 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
23630 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
23640 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
23650 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63  ase OP_RowKey:.c
23660 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
23670 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23680 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
23690 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
236a0 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f    i64 n64;..  pO
236b0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
236c0 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
236d0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
236e0 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  ;..  /* Note tha
236f0 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77  t RowKey and Row
23700 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20  Data are really 
23710 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
23720 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
23730 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23740 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23750 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23760 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23770 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23780 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
23790 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
237a0 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
237b0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f  p->opcode!=OP_Ro
237c0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
237d0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
237e0 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
237f0 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
23800 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23820 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
23830 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
23840 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
23850 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23860 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23870 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23880 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
23890 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f  P_RowKey and OP_
238a0 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
238b0 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
238c0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
238d0 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  ** OP_Rewind/Op_
238e0 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
238f0 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
23900 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
23910 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a   invalidate.  **
23920 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 49 66   the cursor.  If
23930 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
23940 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
23950 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
23960 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
23970 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
23980 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
23990 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
239a0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
239b0 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
239c0 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
239d0 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
239e0 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
239f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23a00 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
23a10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
23a20 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
23a30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
23a40 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
23a50 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
23a60 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
23a70 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
23a80 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
23a90 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
23aa0 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
23ab0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
23ac0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
23ad0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
23ae0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23af0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
23b00 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61  ..  if( pC->isTa
23b10 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  ble==0 ){.    as
23b20 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62  sert( !pC->isTab
23b30 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e  le );.    VVA_ON
23b40 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
23b50 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
23b60 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61  sr, &n64);.    a
23b70 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
23b80 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72  E_OK );    /* Tr
23b90 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
23ba0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
23bb0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69  l above */.    i
23bc0 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69  f( n64>db->aLimi
23bd0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
23be0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
23bf0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
23c00 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32    }.    n = (u32
23c10 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )n64;.  }else{. 
23c20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
23c30 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
23c40 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
23c50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
23c60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
23c70 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
23c80 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
23c90 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64      if( n>(u32)d
23ca0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
23cb0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
23cc0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
23cd0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _big;.    }.  }.
23ce0 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30    testcase( n==0
23cf0 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   );.  if( sqlite
23d00 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
23d10 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58  Resize(pOut, MAX
23d20 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20 67  (n,32)) ){.    g
23d30 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
23d40 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20    pOut->n = n;. 
23d50 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
23d60 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pOut, MEM_Blob);
23d70 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
23d80 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  le==0 ){.    rc 
23d90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
23da0 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
23db0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
23dc0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
23dd0 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
23de0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
23df0 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
23e00 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
23e10 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
23e20 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
23e30 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
23e40 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
23e50 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45  SIZE(pOut);.  RE
23e60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
23e70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62  ->p2, pOut);.  b
23e80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23e90 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
23ea0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
23eb0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
23ec0 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
23ed0 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
23ee0 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
23ef0 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  e key of the tab
23f00 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a  le entry that.**
23f10 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23f20 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a   point to..**.**
23f30 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65   P1 can be eithe
23f40 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61  r an ordinary ta
23f50 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c  ble or a virtual
23f60 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75   table.  There u
23f70 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73  sed to.** be a s
23f80 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69  eparate OP_VRowi
23f90 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65  d opcode for use
23fa0 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61   with virtual ta
23fb0 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a  bles, but this.*
23fc0 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77  * one opcode now
23fd0 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
23fe0 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a  table types..*/.
23ff0 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b  case OP_Rowid: {
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
24020 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ase */.  VdbeCur
24030 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
24040 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
24050 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
24060 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
24070 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
24080 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24090 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
240a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
240b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
240c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
240d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
240e0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
240f0 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  eg==0 || pC->nul
24100 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
24110 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
24120 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
24130 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
24140 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
24150 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24160 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
24170 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
24180 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24190 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
241a0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
241b0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a  >pVtabCursor ){.
241c0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
241d0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
241e0 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
241f0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
24200 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
24210 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
24220 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
24230 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56  e->xRowid(pC->pV
24240 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  tabCursor, &v);.
24250 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
24260 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
24270 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
24280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24290 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
242a0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
242b0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
242c0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
242d0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
242e0 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69  store(pC);.    i
242f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
24300 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24310 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
24320 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f  lRow ){.      pO
24330 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
24340 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61  Null;.      brea
24350 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  k;.    }.    rc 
24360 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
24370 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
24380 72 2c 20 26 76 29 3b 0a 20 20 20 20 61 73 73 65  r, &v);.    asse
24390 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
243a0 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
243b0 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
243c0 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 62  rsorRestore() ab
243d0 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75  ove */.  }.  pOu
243e0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
243f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24400 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
24410 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
24420 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
24430 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
24440 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
24450 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
24460 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
24470 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
24480 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
24490 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
244a0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
244b0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
244c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
244d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
244e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
244f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24500 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24510 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24520 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
24530 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
24540 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24550 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24560 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
24570 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
24580 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
24590 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
245a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
245b0 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
245c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
245d0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
245e0 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
245f0 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74  umn or Prev inst
24600 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
24610 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
24620 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
24630 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
24640 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
24650 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
24660 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
24670 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
24680 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
24690 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
246a0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
246b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
246c0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
246d0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
246e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
246f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
24700 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
24710 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
24720 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
24730 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
24740 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
24750 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
24760 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
24770 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
24780 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
24790 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
247a0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
247b0 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
247c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
247d0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
247e0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
247f0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
24800 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
24810 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24820 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24830 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24840 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24850 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24860 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24870 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
24880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
24890 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
248a0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
248b0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
248c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
248d0 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
248e0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
248f0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24900 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24910 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24920 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
24930 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65  Op = OP_Last;.#e
24940 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
24950 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
24960 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
24970 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
24980 65 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  es ) pc = pOp->p
24990 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
249a0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
249b0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
249c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
249d0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
249e0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
249f0 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
24a00 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
24a10 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
24a20 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
24a30 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
24a40 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
24a50 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
24a60 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
24a70 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
24a80 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
24a90 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
24aa0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
24ab0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
24ac0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
24ad0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
24ae0 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
24af0 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
24b00 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
24b10 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
24b20 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
24b30 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
24b40 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
24b50 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
24b60 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
24b70 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
24b80 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
24b90 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
24ba0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
24bb0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
24bc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24bd0 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
24be0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
24bf0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24c00 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
24c10 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
24c20 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
24c30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
24c40 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
24c50 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
24c60 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
24c70 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
24c80 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
24c90 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
24ca0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
24cb0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
24cc0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
24cd0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
24ce0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
24cf0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
24d00 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
24d10 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
24d20 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
24d30 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
24d40 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
24d50 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
24d60 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
24d70 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24d80 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
24d90 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
24da0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
24db0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
24dc0 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
24dd0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
24de0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
24df0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
24e00 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
24e10 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
24e20 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
24e30 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
24e40 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
24e50 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
24e60 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
24e70 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
24e80 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
24e90 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
24ea0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
24eb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24ec0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
24ed0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
24ee0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24ef0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24f00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24f10 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24f20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24f30 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24f40 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
24f50 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
24f60 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
24f70 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
24f80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24f90 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
24fa0 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
24fb0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
24fc0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24fd0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24fe0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
24ff0 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
25000 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
25010 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  >pCursor;.    as
25020 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
25030 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25040 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
25050 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
25060 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
25070 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
25080 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25090 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d  STALE;.  }.  pC-
250a0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
250b0 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
250c0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
250d0 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
250e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
250f0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
25100 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
25110 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
25120 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25130 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
25140 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
25150 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
25160 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
25170 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
25180 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
25190 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
251a0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
251b0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
251c0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
251d0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
251e0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
251f0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
25200 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
25210 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
25220 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
25230 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
25240 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
25250 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
25260 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
25270 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
25280 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
25290 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
252a0 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
252b0 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
252c0 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
252d0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
252e0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
252f0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
25300 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
25310 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
25320 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
25330 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
25340 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
25350 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
25360 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
25370 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
25380 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
25390 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
253a0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
253b0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
253c0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
253d0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
253e0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
253f0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
25400 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
25410 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
25420 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
25430 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
25440 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
25450 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
25460 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
25470 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
25480 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
25490 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
254a0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
254b0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
254c0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
254d0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
254e0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
254f0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
25500 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
25510 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
25520 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
25530 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
25540 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
25550 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
25560 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65   Prev, NextIfOpe
25570 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  n.*/./* Opcode: 
25580 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32  NextIfOpen P1 P2
25590 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
255a0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
255b0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74  s just like Next
255c0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
255d0 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
255e0 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
255f0 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
25600 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
25610 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25620 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
25630 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
25640 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
25650 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
25660 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
25670 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
25680 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
25690 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
256a0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
256b0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
256c0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
256d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
256e0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
256f0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
25700 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
25710 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
25720 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ..**.**.** The P
25730 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
25740 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
25750 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65  ng an SeekLT, Se
25760 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c  ekLE, or.** OP_L
25770 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ast opcode used 
25780 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
25790 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73  cursor.  Prev is
257a0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
257b0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54  to follow SeekGT
257c0 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f  , SeekGE, or OP_
257d0 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  Rewind..**.** Th
257e0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
257f0 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
25800 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
25810 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31  do-table.  If P1
25820 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20   is.** not open 
25830 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
25840 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
25850 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
25860 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
25870 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
25880 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
25890 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
258a0 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
258b0 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
258c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
258d0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
258e0 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
258f0 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
25900 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
25910 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
25920 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
25930 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
25940 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
25950 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
25960 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
25970 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
25980 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
25990 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
259a0 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
259b0 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
259c0 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
259d0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
259e0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
259f0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
25a00 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
25a10 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ented..*/./* Opc
25a20 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20  ode: PrevIfOpen 
25a30 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25a40 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25a50 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
25a60 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61   Prev except tha
25a70 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
25a80 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
25a90 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
25aa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
25ab0 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
25ac0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
25ad0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
25ae0 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
25af0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25b00 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
25b10 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d  r(pC) );.  res =
25b20 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
25b30 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
25b40 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
25b50 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c    goto next_tail
25b60 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66  ;.case OP_PrevIf
25b70 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
25b80 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
25b90 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
25ba0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61  mp */.  if( p->a
25bb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30  pCsr[pOp->p1]==0
25bc0 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
25bd0 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63  all through */.c
25be0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
25bf0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
25c00 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
25c10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25c20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
25c30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25c40 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25c50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25c60 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
25c70 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
25c80 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
25c90 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70  ->p1];.  res = p
25ca0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
25cb0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
25cc0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25cd0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25ce0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
25cf0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
25d00 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d   res==0 || (res=
25d10 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =1 && pC->isTabl
25d20 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63  e==0) );.  testc
25d30 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20  ase( res==1 );. 
25d40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25d50 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
25d60 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
25d70 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
25d80 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
25d90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
25da0 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
25db0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25dc0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
25dd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25de0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
25df0 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  tIfOpen || pOp->
25e00 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
25e10 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
25e20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25e30 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
25e40 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
25e50 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
25e60 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29  e3BtreePrevious)
25e70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74  ;..  /* The Next
25e80 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
25e90 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47  used after SeekG
25ea0 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52  T, SeekGE, and R
25eb0 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  ewind..  ** The 
25ec0 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
25ed0 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
25ee0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
25ef0 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
25f00 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25f10 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
25f20 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
25f30 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  xtIfOpen.       
25f40 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
25f50 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e  P_SeekGT || pC->
25f60 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
25f70 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
25f80 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e  seekOp==OP_Rewin
25f90 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  d || pC->seekOp=
25fa0 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73  =OP_Found);.  as
25fb0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25fc0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
25fd0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
25fe0 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  evIfOpen.       
25ff0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26000 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
26010 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
26020 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
26030 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
26040 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
26050 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
26060 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
26070 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
26080 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26090 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
260a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
260b0 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
260c0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
260d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
260e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
260f0 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   1;.    p->aCoun
26100 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
26110 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
26120 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
26130 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
26140 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20  endif.  }else{. 
26150 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
26160 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
26170 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
26180 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
26190 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
261a0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
261b0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
261c0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
261d0 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
261e0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
261f0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
26200 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
26210 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
26220 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
26230 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
26240 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
26250 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
26260 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
26270 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
26280 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
26290 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
262a0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
262b0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
262c0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
262d0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
262e0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
262f0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
26300 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
26310 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
26320 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
26330 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
26340 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
26350 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
26360 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
26370 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
26380 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
26390 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
263a0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
263b0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
263c0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
263d0 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
263e0 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
263f0 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
26400 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
26410 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
26420 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
26430 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
26440 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
26450 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
26460 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
26470 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
26480 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
26490 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
264a0 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
264b0 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
264c0 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
264d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
264e0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
264f0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
26500 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26510 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26520 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e   int nKey;.  con
26530 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a  st char *zKey;..
26540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26550 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26560 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26570 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26580 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26590 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
265a0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
265b0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
265c0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
265d0 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
265e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
265f0 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
26600 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
26610 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
26620 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
26630 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26640 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
26650 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
26660 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
26670 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
26680 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
26690 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
266a0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
266b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
266c0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
266d0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
266e0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
266f0 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
26700 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26710 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
26720 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
26730 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
26740 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
26750 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
26760 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
26770 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
26780 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
26790 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
267a0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
267b0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
267c0 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
267d0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
267e0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
267f0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
26800 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26810 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
26820 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26830 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
26840 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26850 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26860 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
26870 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
26880 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
26890 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
268a0 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
268b0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
268c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
268d0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
268e0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
268f0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
26900 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
26910 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
26920 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26930 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
26940 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26950 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
26960 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
26970 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
26980 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
26990 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
269a0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
269b0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
269c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
269d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
269e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
269f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26a00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26a10 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
26a20 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
26a30 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
26a40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26a50 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
26a60 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
26a70 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
26a80 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
26a90 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
26aa0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
26ab0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
26ac0 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
26ad0 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
26ae0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
26af0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
26b00 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
26b10 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
26b20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
26b30 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
26b40 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
26b50 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
26b60 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26b70 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
26b80 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
26b90 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
26ba0 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
26bb0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
26bc0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
26bd0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26be0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26bf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
26c00 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
26c10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26c20 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
26c30 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
26c40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26c50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
26c60 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
26c70 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
26c80 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
26c90 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
26ca0 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
26cb0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
26cc0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
26cd0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
26ce0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
26cf0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
26d00 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
26d10 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
26d20 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
26d30 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
26d40 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
26d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
26d60 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
26d70 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
26d80 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
26d90 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
26da0 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
26db0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26dc0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26dd0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26de0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26df0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26e00 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
26e10 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
26e20 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
26e30 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
26e40 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Null;.  assert(
26e50 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
26e60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26e70 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
26e80 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  =0 );..  /* sqli
26e90 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
26ea0 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
26eb0 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
26ec0 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
26ed0 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
26ee0 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
26ef0 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
26f00 76 65 72 20 68 61 70 70 65 6e 64 20 66 6f 72 20  ver happend for 
26f10 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
26f20 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63 65 20 74   opcode, hence t
26f30 68 65 20 4e 45 56 45 52 28 29 20 61 72 72 6f 75  he NEVER() arrou
26f40 6e 64 20 74 68 65 20 63 68 65 63 6b 20 6f 66 20  nd the check of 
26f50 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
26f60 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ..  */.  rc = sq
26f70 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
26f80 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 69 66  estore(pC);.  if
26f90 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
26fa0 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
26fb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26fc0 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
26fd0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
26fe0 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
26ff0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
27000 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
27010 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
27020 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27030 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72  IdxRowid(db, pCr
27040 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
27050 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
27060 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
27070 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27080 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ror;.    }.    p
27090 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
270a0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
270b0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  s = MEM_Int;.  }
270c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
270d0 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
270e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
270f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
27100 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
27110 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
27120 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
27130 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
27140 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
27150 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
27160 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
27170 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
27180 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
27190 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
271a0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
271b0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
271c0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
271d0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
271e0 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
271f0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
27200 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
27210 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
27220 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
27230 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
27240 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
27250 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
27260 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
27270 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
27280 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
27290 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50  e: IdxGT P1 P2 P
272a0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
272b0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
272c0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
272d0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
272e0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
272f0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
27300 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
27310 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
27320 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
27330 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
27340 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
27350 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
27360 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27370 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27380 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27390 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
273a0 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
273b0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
273c0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
273d0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
273e0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
273f0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
27400 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
27410 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
27420 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
27430 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
27440 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
27450 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
27460 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
27470 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
27480 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
27490 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
274a0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
274b0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
274c0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
274d0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
274e0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
274f0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
27500 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
27510 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
27520 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27530 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27540 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
27550 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
27560 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
27570 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
27580 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
27590 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
275a0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
275b0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
275c0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
275d0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
275e0 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
275f0 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33  : IdxLE P1 P2 P3
27600 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
27610 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
27620 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
27630 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
27640 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
27650 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
27660 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
27670 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
27680 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
27690 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
276a0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
276b0 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
276c0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
276d0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
276e0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
276f0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
27700 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
27710 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
27720 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
27730 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
27740 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
27750 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
27760 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
27770 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
27780 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
27790 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
277a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45  */.case OP_IdxLE
277b0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
277c0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
277d0 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xGT:          /*
277e0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
277f0 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
27800 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
27810 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20   OP_IdxGE:  {   
27820 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27830 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27840 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
27850 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
27860 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27870 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27880 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27890 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
278a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
278b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
278c0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
278d0 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
278e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29   pC->pCursor!=0)
278f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27900 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27910 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27920 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
27930 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73  ->p5==1 );.  ass
27940 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
27950 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
27960 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
27970 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
27980 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
27990 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f  ->p4.i;.  if( pO
279a0 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78  p->opcode<OP_Idx
279b0 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LT ){.    assert
279c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
279d0 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
279e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
279f0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
27a00 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  t_rc = -1;.  }el
27a10 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27a20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27a30 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
27a40 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
27a50 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
27a60 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e  rc = 0;.  }.  r.
27a70 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
27a80 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
27a90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
27aa0 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
27ab0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
27ac0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
27ad0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
27ae0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73  ; }.#endif.  res
27af0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
27b00 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
27b10 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
27b20 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
27b30 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
27b40 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43  eyCompare(db, pC
27b50 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61  , &r, &res);.  a
27b60 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45  ssert( (OP_IdxLE
27b70 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
27b80 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31  ) && (OP_IdxGE&1
27b90 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20  )==(OP_IdxGT&1) 
27ba0 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  );.  if( (pOp->o
27bb0 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64  pcode&1)==(OP_Id
27bc0 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73  xLT&1) ){.    as
27bd0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27be0 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
27bf0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
27c00 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20  dxLT );.    res 
27c10 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b  = -res;.  }else{
27c20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
27c30 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27c40 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
27c50 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
27c60 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
27c70 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
27c80 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20  res>0,2);.  if( 
27c90 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 70 63 20  res>0 ){.    pc 
27ca0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a  = pOp->p2 - 1 ;.
27cb0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27cc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
27cd0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
27ce0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
27cf0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
27d00 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
27d10 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
27d20 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
27d30 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
27d40 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
27d50 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
27d60 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
27d70 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
27d80 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
27d90 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
27da0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
27db0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
27dc0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
27dd0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
27de0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
27df0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
27e00 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
27e10 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
27e20 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
27e30 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
27e40 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
27e50 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
27e60 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
27e70 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
27e80 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
27e90 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
27ea0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
27eb0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
27ec0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
27ed0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
27ee0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
27ef0 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
27f00 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
27f10 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
27f20 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
27f30 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
27f40 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
27f50 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
27f60 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
27f70 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
27f80 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
27f90 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
27fa0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
27fb0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
27fc0 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
27fd0 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
27fe0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
27ff0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
28000 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
28010 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
28020 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
28030 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
28040 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
28050 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
28060 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
28070 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
28080 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
28090 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56  .  int iCnt;.  V
280a0 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e  dbe *pVdbe;.  in
280b0 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74  t iDb;..  assert
280c0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
280d0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
280e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
280f0 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
28100 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
28110 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
28120 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
28130 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
28140 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
28150 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
28160 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a  dbe->bIsReader .
28170 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69       && pVdbe->i
28180 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
28190 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20   pVdbe->pc>=0 . 
281a0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74     ){.      iCnt
281b0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ++;.    }.  }.#e
281c0 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d  lse.  iCnt = db-
281d0 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64  >nVdbeRead;.#end
281e0 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
281f0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
28200 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
28210 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
28220 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
28230 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
28240 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
28250 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
28260 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
28270 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
28280 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
28290 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
282a0 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d   );.    iMoved =
282b0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
282c0 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c  ed.  Only to sil
282d0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
282e0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
282f0 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
28300 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
28310 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
28320 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d  oved);.    pOut-
28330 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
28340 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
28350 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65  = iMoved;.#ifnde
28360 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
28370 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
28380 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
28390 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  & iMoved!=0 ){. 
283a0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
283b0 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
283c0 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
283d0 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
283e0 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
283f0 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
28400 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
28410 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
28420 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
28430 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
28440 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
28450 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
28460 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
28470 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
28480 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
28490 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
284a0 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
284b0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
284c0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
284d0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
284e0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
284f0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
28500 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
28510 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
28520 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
28530 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
28540 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
28550 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
28560 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
28570 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
28580 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
28590 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
285a0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
285b0 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
285c0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
285d0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
285e0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
285f0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
28600 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
28610 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
28620 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
28630 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
28640 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
28650 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
28660 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
28670 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
28680 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
28690 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
286a0 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
286b0 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
286c0 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
286d0 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
286e0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
286f0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
28700 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
28710 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
28720 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
28730 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
28740 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
28750 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
28760 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
28770 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
28780 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
28790 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
287a0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
287b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
287c0 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
287d0 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
287e0 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
287f0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
28800 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
28810 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
28820 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
28830 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
28840 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  >p2) );.  rc = s
28850 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
28860 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
28870 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
28880 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
28890 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
288a0 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
288b0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
288c0 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
288d0 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
288e0 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
288f0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
28900 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
28910 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  3]) );.      mem
28920 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
28930 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
28940 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  ;.      aMem[pOp
28950 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
28960 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
28970 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28980 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74  pcode: ResetSort
28990 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  er P1 * * * *.**
289a0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
289b0 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  ontents from the
289c0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
289d0 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68   or sorter.** th
289e0 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75  at is open on cu
289f0 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P1..**.** T
28a00 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20  his opcode only 
28a10 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72  works for cursor
28a20 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69  s used for sorti
28a30 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64  ng and.** opened
28a40 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68   with OP_OpenEph
28a50 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72  emeral or OP_Sor
28a60 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65  terOpen..*/.case
28a70 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a   OP_ResetSorter:
28a80 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
28a90 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28  *pC;. .  assert(
28aa0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28ab0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28ac0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28ad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28ae0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28af0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72  ;.  if( pC->pSor
28b00 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ter ){.    sqlit
28b10 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
28b20 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65  t(db, pC->pSorte
28b30 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
28b40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45   assert( pC->isE
28b50 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20  phemeral );.    
28b60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28b70 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72  eClearTableOfCur
28b80 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
28b90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28ba0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
28bb0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
28bc0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
28bd0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
28be0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
28bf0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
28c00 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28c10 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
28c20 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
28c30 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28c40 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
28c50 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
28c60 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
28c70 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
28c80 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
28c90 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
28ca0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
28cb0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
28cc0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
28cd0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
28ce0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
28cf0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
28d00 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
28d10 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
28d20 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
28d30 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
28d40 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
28d50 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
28d60 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
28d70 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
28d80 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
28d90 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
28da0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
28db0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
28dc0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
28dd0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
28de0 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
28df0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
28e00 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
28e10 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
28e20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
28e30 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
28e40 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
28e50 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
28e60 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
28e70 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
28e80 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
28e90 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
28ea0 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
28eb0 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
28ec0 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
28ed0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
28ee0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
28ef0 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
28f00 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
28f10 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
28f20 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
28f30 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
28f40 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
28f50 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
28f60 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
28f70 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f  Db *pDb;..  pgno
28f80 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
28f90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
28fa0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
28fb0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
28fc0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
28fd0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
28fe0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
28ff0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
29000 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
29010 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29020 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
29030 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
29040 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
29050 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
29060 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
29070 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
29080 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
29090 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
290a0 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
290b0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
290c0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
290d0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
290e0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
290f0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
29100 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
29110 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
29120 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
29130 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
29140 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
29150 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
29160 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
29170 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
29180 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
29190 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
291a0 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
291b0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
291c0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
291d0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
291e0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
291f0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
29200 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
29210 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
29220 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
29230 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
29240 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
29250 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
29260 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
29270 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
29280 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
29290 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
292a0 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
292b0 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
292c0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
292d0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
292e0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
292f0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
29300 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
29310 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
29320 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
29330 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
29340 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
29350 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
29360 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
29370 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
29380 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
29390 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
293a0 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
293b0 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
293c0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
293d0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
293e0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
293f0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
29400 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
29410 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
29420 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
29430 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
29440 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
29450 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
29460 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
29470 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
29480 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
29490 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
294a0 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
294b0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
294c0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
294d0 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
294e0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
294f0 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
29500 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
29510 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
29520 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
29530 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
29540 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
29550 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
29560 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
29570 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
29580 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29590 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
295a0 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
295b0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
295c0 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
295d0 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
295e0 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
295f0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
29600 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
29610 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
29620 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
29630 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
29640 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
29650 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
29660 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
29670 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
29680 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
29690 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
296a0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
296b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
296c0 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
296d0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
296e0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
296f0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
29700 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
29710 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
29720 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
29730 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29740 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
29750 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
29760 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
29770 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
29780 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
29790 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
297a0 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
297b0 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
297c0 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
297d0 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
297e0 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
297f0 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
29800 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
29810 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
29820 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
29830 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
29840 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
29850 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
29860 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29870 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
29880 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
29890 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
298a0 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
298b0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
298c0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
298d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
298e0 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
298f0 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
29900 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
29910 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
29920 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
29930 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
29940 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
29950 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
29960 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
29970 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
29980 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
29990 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
299a0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
299b0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
299c0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
299d0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
299e0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
299f0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
29a00 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
29a10 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
29a20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
29a30 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
29a40 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
29a50 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
29a60 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
29a70 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
29a80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
29a90 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
29aa0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
29ab0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
29ac0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
29ad0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
29ae0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
29af0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
29b00 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
29b10 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
29b20 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
29b30 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
29b40 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
29b50 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
29b60 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
29b70 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
29b80 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
29b90 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
29ba0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
29bb0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
29bc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
29bd0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
29be0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29bf0 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
29c00 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
29c10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29c20 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
29c30 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
29c40 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
29c50 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
29c60 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
29c70 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
29c80 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
29c90 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
29ca0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
29cb0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
29cc0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
29cd0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
29ce0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
29cf0 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
29d00 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
29d10 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
29d20 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
29d30 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
29d40 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
29d50 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
29d60 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
29d70 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
29d80 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
29d90 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
29da0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
29db0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
29dc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29dd0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
29de0 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
29df0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
29e00 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
29e10 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
29e20 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
29e30 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
29e40 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
29e50 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
29e60 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
29e70 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
29e80 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
29e90 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
29ea0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
29eb0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
29ec0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
29ed0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
29ee0 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
29ef0 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
29f00 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
29f10 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
29f20 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
29f30 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
29f40 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
29f50 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
29f60 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
29f70 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
29f80 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
29f90 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
29fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
29fb0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
29fc0 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
29fd0 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
29fe0 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
29ff0 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
2a000 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
2a010 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
2a020 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
2a030 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
2a040 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
2a050 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
2a060 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2a070 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
2a080 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
2a090 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2a0a0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
2a0b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2a0c0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2a0d0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2a0e0 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
2a0f0 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
2a100 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
2a110 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
2a120 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
2a130 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
2a140 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
2a150 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
2a160 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
2a170 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
2a180 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
2a190 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
2a1a0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
2a1b0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
2a1c0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2a1d0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
2a1e0 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
2a1f0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2a200 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
2a210 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
2a220 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
2a230 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
2a240 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
2a250 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
2a260 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
2a270 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
2a280 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
2a290 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
2a2a0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2a2b0 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2a2c0 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
2a2d0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
2a2e0 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
2a2f0 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
2a300 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
2a310 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
2a320 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2a330 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2a340 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2a350 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2a360 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2a370 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2a380 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2a390 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2a3a0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2a3b0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2a3c0 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2a3d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2a3e0 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
2a3f0 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
2a400 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
2a410 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
2a420 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
2a430 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
2a440 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a450 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
2a460 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2a470 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2a480 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20  , pOp->p5) );.  
2a490 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
2a4a0 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
2a4b0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
2a4c0 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
2a4d0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4f0 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
2a500 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
2a510 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2a520 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
2a530 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2a540 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2a550 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2a560 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2a570 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2a580 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2a590 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2a5a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2a5b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2a5c0 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2a5d0 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2a5e0 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2a5f0 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2a600 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2a610 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2a620 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2a630 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2a640 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a650 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a660 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2a670 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2a680 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2a690 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2a6a0 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2a6b0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2a6c0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2a6d0 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2a6e0 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2a6f0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2a700 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2a710 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2a720 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2a730 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2a740 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2a750 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2a760 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2a770 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2a780 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a790 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2a7a0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2a7b0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2a7c0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2a7d0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2a7e0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2a7f0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2a800 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2a810 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2a820 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2a830 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2a840 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a850 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2a860 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2a870 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2a880 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2a890 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2a8a0 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2a8b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2a8c0 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2a8d0 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2a8e0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2a8f0 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2a900 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2a910 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2a920 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2a930 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2a940 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2a950 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2a960 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2a970 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2a980 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2a990 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2a9a0 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2a9b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2a9c0 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2a9d0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2a9e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2a9f0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2aa00 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2aa10 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2aa20 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2aa30 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2aa40 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2aa50 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2aa60 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2aa70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2aa80 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2aa90 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2aaa0 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  1;.    VdbeBranc
2aab0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d  hTaken(1,2);.  }
2aac0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
2aad0 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
2aae0 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
2aaf0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
2ab00 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2ab10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
2ab20 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2ab30 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d  hTaken(0,2);.  }
2ab40 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2ab50 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2ab60 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2ab70 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
2ab80 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
2ab90 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
2aba0 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
2abb0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
2abc0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
2abd0 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
2abe0 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
2abf0 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
2ac00 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
2ac10 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
2ac20 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
2ac30 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
2ac40 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
2ac50 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
2ac60 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
2ac70 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
2ac80 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
2ac90 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
2aca0 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
2acb0 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
2acc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
2acd0 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
2ace0 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
2acf0 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
2ad00 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
2ad10 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
2ad20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
2ad30 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
2ad40 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
2ad50 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
2ad60 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
2ad70 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
2ad80 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
2ad90 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
2ada0 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
2adb0 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
2adc0 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
2add0 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
2ade0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2adf0 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
2ae00 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
2ae10 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
2ae20 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
2ae30 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
2ae40 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
2ae50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
2ae60 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
2ae70 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
2ae80 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2ae90 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2aea0 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2aeb0 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2aec0 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2aed0 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2aee0 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2aef0 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2af00 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2af10 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2af20 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2af30 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2af40 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2af50 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2af60 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2af70 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2af80 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2af90 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2afa0 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2afb0 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
2afc0 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
2afd0 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
2afe0 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
2aff0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
2b000 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2b010 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2b020 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
2b030 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
2b040 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
2b050 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b060 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
2b070 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
2b080 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
2b090 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
2b0a0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2b0b0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
2b0c0 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
2b0d0 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
2b0e0 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
2b0f0 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
2b100 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
2b110 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
2b120 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
2b130 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
2b140 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2b150 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2b160 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2b170 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2b180 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2b190 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2b1a0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2b1b0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
2b1c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2b1d0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2b1e0 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
2b1f0 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
2b200 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
2b210 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
2b220 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
2b230 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
2b240 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2b250 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2b260 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
2b270 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
2b280 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
2b290 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2b2a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
2b2b0 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
2b2c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2b2d0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2b2e0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2b2f0 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62  3->u.i);.  }.  b
2b300 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2b310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2b320 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65  IGGER../* Opcode
2b330 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20  : Program P1 P2 
2b340 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45  P3 P4 P5.**.** E
2b350 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67  xecute the trigg
2b360 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65  er program passe
2b370 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34  d as P4 (type P4
2b380 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a  _SUBPROGRAM). .*
2b390 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73  *.** P1 contains
2b3a0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
2b3b0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
2b3c0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2b3d0 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a  e first memory .
2b3e0 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72  ** cell in an ar
2b3f0 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ray of values us
2b400 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20  ed as arguments 
2b410 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  to the sub-progr
2b420 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61  am. P2 .** conta
2b430 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2b440 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68  to jump to if th
2b450 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
2b460 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a  rows an IGNORE .
2b470 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69  ** exception usi
2b480 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66  ng the RAISE() f
2b490 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65  unction. Registe
2b4a0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2b4b0 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66  e address .** of
2b4c0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69   a memory cell i
2b4d0 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65  n this (the pare
2b4e0 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75  nt) VM that is u
2b4f0 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  sed to allocate 
2b500 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72  the .** memory r
2b510 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
2b520 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69  ub-vdbe at runti
2b530 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  me..**.** P4 is 
2b540 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2b550 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74   VM containing t
2b560 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2b570 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  am..**.** If P5 
2b580 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2b590 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67  n recursive prog
2b5a0 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69  ram invocation i
2b5b0 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61  s enabled..*/.ca
2b5c0 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b  se OP_Program: {
2b5d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b5e0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
2b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b600 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
2b610 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73   registers for s
2b620 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2b630 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20  int nByte;      
2b640 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
2b650 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63   of runtime spac
2b660 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73  e required for s
2b670 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
2b680 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20  Mem *pRt;       
2b690 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
2b6a0 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ter to allocate 
2b6b0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f  runtime space */
2b6c0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2b6d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
2b6e0 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
2b6f0 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c  rough memory cel
2b700 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e  ls */.  Mem *pEn
2b710 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2b720 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63  /* Last memory c
2b730 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79  ell in new array
2b740 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2b750 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a  *pFrame;      /*
2b760 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20   New vdbe frame 
2b770 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f  to execute in */
2b780 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
2b790 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75  Program;   /* Su
2b7a0 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  b-program to exe
2b7b0 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  cute */.  void *
2b7c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2b7d0 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74    /* Token ident
2b7e0 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a  ifying trigger *
2b7f0 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20  /..  pProgram = 
2b800 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d  pOp->p4.pProgram
2b810 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b  ;.  pRt = &aMem[
2b820 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2b830 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  rt( pProgram->nO
2b840 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49  p>0 );.  .  /* I
2b850 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73  f the p5 flag is
2b860 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63   clear, then rec
2b870 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2b880 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73  n of triggers is
2b890 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20   .  ** disabled 
2b8a0 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f  for backwards co
2b8b0 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20  mpatibility (p5 
2b8c0 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73  is set if this s
2b8d0 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  ub-program.  ** 
2b8e0 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67  is really a trig
2b8f0 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69  ger, not a forei
2b900 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61  gn key action, a
2b910 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a  nd the flag set.
2b920 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64    ** and cleared
2b930 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20   by the "PRAGMA 
2b940 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
2b950 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63  rs" command is c
2b960 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a  lear)..  ** .  *
2b970 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76  * It is recursiv
2b980 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
2b990 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65  triggers, at the
2b9a0 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74   SQL level, that
2b9b0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2b9c0 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65  ed. In some case
2b9d0 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67  s a single trigg
2b9e0 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20  er may generate 
2b9f0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20  more than one . 
2ba00 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28   ** SubProgram (
2ba10 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d  if the trigger m
2ba20 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77  ay be executed w
2ba30 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ith more than on
2ba40 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a  e different .  *
2ba50 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  * ON CONFLICT al
2ba60 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f  gorithm). SubPro
2ba70 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20  gram structures 
2ba80 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2ba90 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72  a.  ** single tr
2baa0 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74  igger all have t
2bab0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
2bac0 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d  r the SubProgram
2bad0 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72  .token .  ** var
2bae0 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28  iable.  */.  if(
2baf0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
2bb00 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  t = pProgram->to
2bb10 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72  ken;.    for(pFr
2bb20 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2bb30 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d  Frame && pFrame-
2bb40 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d  >token!=t; pFram
2bb50 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2bb60 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61  t);.    if( pFra
2bb70 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  me ) break;.  }.
2bb80 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65  .  if( p->nFrame
2bb90 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  >=db->aLimit[SQL
2bba0 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
2bbb0 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20  R_DEPTH] ){.    
2bbc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2bbd0 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  R;.    sqlite3Se
2bbe0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2bbf0 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61  Msg, db, "too ma
2bc00 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
2bc10 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
2bc20 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2bc30 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
2bc40 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
2bc50 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
2bc60 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
2bc70 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
2bc80 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
2bc90 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
2bca0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2bcb0 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
2bcc0 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
2bcd0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
2bce0 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
2bcf0 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
2bd00 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
2bd10 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
2bd20 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
2bd30 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
2bd40 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
2bd50 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
2bd60 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
2bd70 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
2bd80 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
2bd90 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
2bda0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
2bdb0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
2bdc0 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
2bdd0 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
2bde0 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
2bdf0 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
2be00 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
2be10 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
2be20 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
2be30 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
2be40 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
2be50 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
2be60 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
2be70 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
2be80 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
2be90 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
2bea0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
2beb0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
2bec0 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  sr;.    nByte = 
2bed0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2bee0 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
2bef0 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
2bf00 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
2bf10 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2bf20 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
2bf30 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
2bf40 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
2bf50 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   + pProgram->nOn
2bf60 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b  ce * sizeof(u8);
2bf70 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
2bf80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
2bf90 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
2bfa0 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
2bfb0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2bfc0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
2bfd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2bfe0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
2bff0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
2c000 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
2c010 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
2c020 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
2c030 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
2c040 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
2c050 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2c060 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
2c070 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2c080 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b  pFrame->pc = pc;
2c090 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2c0a0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2c0b0 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2c0c0 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2c0d0 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2c0e0 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2c0f0 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2c100 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2c110 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2c120 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2c130 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2c140 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2c150 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2c160 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2c170 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2c180 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2c190 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2c1a0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69  p->nOnceFlag;.#i
2c1b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2c1c0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2c1d0 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
2c1e0 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
2c1f0 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
2c200 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
2c210 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
2c220 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
2c230 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
2c240 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2c250 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
2c260 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
2c270 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
2c280 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
2c290 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
2c2a0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2c2b0 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
2c2c0 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
2c2d0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2c2e0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
2c2f0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2c300 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61  hildMem );.    a
2c310 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2c320 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2c330 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
2c340 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61  assert( pc==pFra
2c350 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
2c360 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
2c370 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
2c380 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2c390 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
2c3a0 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
2c3b0 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
2c3c0 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
2c3d0 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
2c3e0 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
2c3f0 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
2c400 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
2c410 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
2c420 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
2c430 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2c440 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
2c450 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
2c460 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
2c470 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
2c480 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
2c490 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
2c4a0 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
2c4b0 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
2c4c0 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
2c4d0 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
2c4e0 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
2c4f0 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
2c500 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
2c510 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
2c520 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
2c530 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
2c540 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53  >nOnce;.#ifdef S
2c550 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2c560 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
2c570 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
2c580 6e 64 69 66 0a 20 20 70 63 20 3d 20 2d 31 3b 0a  ndif.  pc = -1;.
2c590 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63    memset(p->aOnc
2c5a0 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e  eFlag, 0, p->nOn
2c5b0 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61  ceFlag);..  brea
2c5c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c5d0 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
2c5e0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
2c5f0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
2c600 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
2c610 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
2c620 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
2c630 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2c640 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
2c650 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
2c660 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
2c670 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
2c680 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
2c690 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
2c6a0 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
2c6b0 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
2c6c0 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
2c6d0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
2c6e0 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
2c6f0 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
2c700 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
2c710 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
2c720 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
2c730 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
2c740 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
2c750 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
2c760 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
2c770 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2c780 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
2c790 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
2c7a0 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
2c7b0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
2c7c0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2c7d0 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
2c7e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
2c7f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56  rerelease */.  V
2c800 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2c810 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
2c820 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
2c830 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
2c840 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2c850 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
2c860 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
2c870 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
2c880 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
2c890 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
2c8a0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
2c8b0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
2c8c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c8d0 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
2c8e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c8f0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
2c900 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
2c910 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
2c920 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
2c930 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
2c940 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
2c950 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
2c960 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
2c970 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
2c980 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
2c990 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2c9a0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2c9b0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
2c9c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
2c9d0 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
2c9e0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2c9f0 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
2ca00 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
2ca10 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
2ca20 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2ca30 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
2ca40 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
2ca50 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
2ca60 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
2ca70 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
2ca80 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
2ca90 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
2caa0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2cab0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2cac0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
2cad0 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
2cae0 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
2caf0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
2cb00 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
2cb10 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
2cb20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2cb30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
2cb40 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
2cb50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2cb60 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
2cb70 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
2cb80 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
2cb90 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
2cba0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2cbb0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
2cbc0 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
2cbd0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2cbe0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
2cbf0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
2cc00 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
2cc10 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2cc20 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2cc30 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
2cc40 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2cc50 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2cc60 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
2cc70 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
2cc80 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
2cc90 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
2cca0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2ccb0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
2ccc0 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
2ccd0 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
2cce0 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
2ccf0 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
2cd00 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
2cd10 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2cd20 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2cd30 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2cd40 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2cd50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2cd60 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2cd70 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2cd80 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
2cd90 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2cda0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2cdb0 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
2cdc0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2cdd0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2cde0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2cdf0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2ce00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
2ce10 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
2ce20 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2ce30 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2ce40 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2ce50 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
2ce60 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2ce70 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2ce80 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20  mCons==0 ) pc = 
2ce90 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
2cea0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ceb0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2cec0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2ced0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2cee0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2cef0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2cf00 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2cf10 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2cf20 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
2cf30 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
2cf40 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
2cf50 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
2cf60 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
2cf70 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
2cf80 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
2cf90 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
2cfa0 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
2cfb0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
2cfc0 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
2cfd0 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
2cfe0 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
2cff0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2d000 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
2d010 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
2d020 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
2d030 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2d040 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2d050 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2d060 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2d070 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
2d080 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
2d090 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
2d0a0 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
2d0b0 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
2d0c0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2d0d0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2d0e0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2d0f0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2d100 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2d110 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2d120 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2d130 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2d140 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2d150 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2d160 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2d170 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2d180 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2d190 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2d1a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2d1b0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2d1c0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2d1d0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2d1e0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2d1f0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2d200 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2d210 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2d220 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2d230 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2d240 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2d250 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2d260 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2d270 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2d280 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d290 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2d2a0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  oto P2.**.** If 
2d2b0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2d2c0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
2d2d0 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
2d2e0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
2d2f0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
2d300 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2d310 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
2d320 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
2d330 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2d340 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
2d350 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
2d360 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
2d370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2d380 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2d390 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2d3a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2d3b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d3c0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2d3d0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2d3e0 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2d3f0 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2d400 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2d410 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2d420 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2d430 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d440 20 49 66 4e 65 67 20 50 31 20 50 32 20 50 33 20   IfNeg P1 P2 P3 
2d450 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2d460 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72   r[P1]+=P3, if r
2d470 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]<0 goto P2.*
2d480 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
2d490 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
2d4a0 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c   integer.  Add l
2d4b0 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65  iteral P3 to the
2d4c0 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
2d4d0 69 73 74 65 72 20 50 31 20 74 68 65 6e 20 69 66  ister P1 then if
2d4e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2d4f0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2d500 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
2d510 70 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73  p to P2. .*/.cas
2d520 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
2d530 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2d540 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2d550 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d560 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2d570 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2d580 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2d590 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61  p->p3;.  VdbeBra
2d5a0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2d5b0 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
2d5c0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
2d5d0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2d5e0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2d5f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d600 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
2d610 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2d620 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20  : r[P1]+=P3, if 
2d630 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
2d640 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2d650 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2d660 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2d670 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
2d680 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  to the.** value 
2d690 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
2d6a0 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   If the result i
2d6b0 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d  s exactly 0, jum
2d6c0 70 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73  p to P2. .*/.cas
2d6d0 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
2d6e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2d6f0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2d700 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d710 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2d720 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2d730 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
2d740 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72  Op->p3;.  VdbeBr
2d750 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
2d760 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  u.i==0, 2);.  if
2d770 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
2d780 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2d790 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2d7a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d7b0 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
2d7c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2d7d0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
2d7e0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
2d7f0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
2d800 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2d810 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2d820 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
2d830 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
2d840 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
2d850 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2d860 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
2d870 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
2d880 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
2d890 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a  .  Use register.
2d8a0 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63  ** P3 as the acc
2d8b0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
2d8c0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
2d8d0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
2d8e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
2d8f0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
2d900 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  s..*/.case OP_Ag
2d910 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e  gStep: {.  int n
2d920 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
2d930 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70   *pMem;.  Mem *p
2d940 52 65 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20  Rec;.  Mem t;.  
2d950 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2d960 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2d970 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2d980 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2d990 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2d9a0 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2d9b0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2d9c0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2d9d0 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2d9e0 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2d9f0 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2da00 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2da10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2da20 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2da30 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2da40 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2da50 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  p, pRec);.  }.  
2da60 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
2da70 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
2da80 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2da90 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2daa0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2dab0 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
2dac0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2dad0 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
2dae0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ++;.  sqlite3Vdb
2daf0 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c  eMemInit(&t, db,
2db00 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74   MEM_Null);.  ct
2db10 78 2e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63  x.pOut = &t;.  c
2db20 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2db30 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
2db40 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b  .  ctx.iOp = pc;
2db50 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2db60 3d 20 30 3b 0a 20 20 28 63 74 78 2e 70 46 75 6e  = 0;.  (ctx.pFun
2db70 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20  c->xStep)(&ctx, 
2db80 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
2db90 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
2dba0 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
2dbb0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
2dbc0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2dbd0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2dbe0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2dbf0 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
2dc00 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
2dc10 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74  or;.  }.  if( ct
2dc20 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  x.skipFlag ){.  
2dc30 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2dc40 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2dc50 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
2dc60 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
2dc70 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
2dc80 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2dc90 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
2dca0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2dcb0 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20  mRelease(&t);.  
2dcc0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2dcd0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2dce0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
2dcf0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
2dd00 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
2dd10 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
2dd20 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
2dd30 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2dd40 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
2dd50 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
2dd60 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
2dd70 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
2dd80 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
2dd90 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
2dda0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
2ddb0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
2ddc0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
2ddd0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2dde0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
2ddf0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
2de00 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
2de10 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
2de20 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
2de30 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
2de40 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
2de50 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
2de60 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
2de70 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
2de80 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
2de90 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
2dea0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
2deb0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
2dec0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
2ded0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
2dee0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
2def0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
2df00 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
2df10 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
2df20 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2df30 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
2df40 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
2df50 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
2df60 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2df70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
2df80 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
2df90 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
2dfa0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
2dfb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
2dfc0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
2dfd0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
2dfe0 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2dff0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2e000 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2e010 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2e020 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
2e030 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
2e040 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2e050 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
2e060 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2e070 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
2e080 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
2e090 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
2e0a0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2e0b0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2e0c0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2e0d0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
2e0e0 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
2e0f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2e100 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64  .** Checkpoint d
2e110 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73  atabase P1. This
2e120 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50   is a no-op if P
2e130 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  1 is not current
2e140 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64  ly in.** WAL mod
2e150 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20  e. Parameter P2 
2e160 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  is one of SQLITE
2e170 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2e180 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45  IVE, FULL,.** RE
2e190 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41  START, or TRUNCA
2e1a0 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  TE.  Write 1 or 
2e1b0 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
2e1c0 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
2e1d0 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
2e1e0 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
2e1f0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
2e200 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
2e210 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
2e220 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
2e230 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
2e240 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
2e250 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2e260 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
2e270 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
2e280 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
2e290 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2e2a0 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
2e2b0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
2e2c0 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
2e2d0 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
2e2e0 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
2e2f0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2e300 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
2e310 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
2e320 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e340 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2e350 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
2e360 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
2e370 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
2e380 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
2e390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2e3a0 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2e3b0 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
2e3c0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2e3d0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2e3e0 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2e3f0 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2e400 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2e410 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2e420 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2e430 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2e440 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2e450 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2e460 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2e470 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2e480 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20 20  T_RESTART.      
2e490 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2e4a0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54  ITE_CHECKPOINT_T
2e4b0 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72  RUNCATE.  );.  r
2e4c0 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2e4d0 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2e4e0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2e4f0 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2e500 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2e510 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2e520 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2e530 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2e540 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2e550 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2e560 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2e570 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2e580 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2e590 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2e5a0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2e5b0 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2e5c0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2e5d0 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2e5e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2e5f0 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2e600 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67   * *.**.** Chang
2e610 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e the journal mo
2e620 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  de of database P
2e630 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74  1 to P3. P3 must
2e640 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a   be one of the.*
2e650 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  * PAGER_JOURNALM
2e660 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20  ODE_XXX values. 
2e670 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77  If changing betw
2e680 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20  een the various 
2e690 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65  rollback.** mode
2e6a0 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63  s (delete, trunc
2e6b0 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66  ate, persist, of
2e6c0 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74  f and memory), t
2e6d0 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a  his is a simple.
2e6e0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f  ** operation. No
2e6f0 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e   IO is required.
2e700 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69  .**.** If changi
2e710 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f  ng into or out o
2e720 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70  f WAL mode the p
2e730 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65  rocedure is more
2e740 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a   complicated..**
2e750 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69  .** Write a stri
2e760 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
2e770 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d  e final journal-
2e780 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72  mode to register
2e790 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2e7a0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20  JournalMode: {  
2e7b0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2e7c0 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  ease */.  Btree 
2e7d0 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
2e7e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
2e7f0 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
2e800 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
2e810 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e830 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
2e840 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
2e850 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e870 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
2e880 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
2e890 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
2e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2e8b0 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
2e8c0 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
2e8d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2e8e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
2e8f0 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
2e900 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
2e910 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
2e920 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
2e930 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70  .  eNew = pOp->p
2e940 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65  3;.  assert( eNe
2e950 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2e960 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20  MODE_DELETE .   
2e970 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2e980 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
2e990 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20  RUNCATE .       
2e9a0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2e9b0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2e9c0 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ST .       || eN
2e9d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2e9e0 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20  LMODE_OFF.      
2e9f0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2ea00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2ea10 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  RY.       || eNe
2ea20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ea30 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20  MODE_WAL.       
2ea40 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2ea50 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2ea60 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
2ea70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ea80 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2ea90 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2eaa0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
2eab0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2eac0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50  p->p1].pBt;.  pP
2ead0 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
2eae0 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
2eaf0 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50   eOld = sqlite3P
2eb00 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerGetJournalMo
2eb10 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66  de(pPager);.  if
2eb20 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2eb30 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
2eb40 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
2eb50 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67   if( !sqlite3Pag
2eb60 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72  erOkToChangeJour
2eb70 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20  nalMode(pPager) 
2eb80 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a  ) eNew = eOld;..
2eb90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2eba0 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e  MIT_WAL.  zFilen
2ebb0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ame = sqlite3Pag
2ebc0 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65  erFilename(pPage
2ebd0 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  r, 1);..  /* Do 
2ebe0 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
2ebf0 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
2ec00 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
2ec10 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
2ec20 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
2ec30 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
2ec40 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
2ec50 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
2ec60 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65   .  */.  if( eNe
2ec70 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2ec80 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28  MODE_WAL.   && (
2ec90 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2eca0 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20  zFilename)==0   
2ecb0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20          /* Temp 
2ecc0 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c  file */.       |
2ecd0 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57  | !sqlite3PagerW
2ece0 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67  alSupported(pPag
2ecf0 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61  er))   /* No sha
2ed00 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f  red-memory suppo
2ed10 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65  rt */.  ){.    e
2ed20 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2ed30 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f  .  if( (eNew!=eO
2ed40 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d  ld).   && (eOld=
2ed50 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ed60 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d  DE_WAL || eNew==
2ed70 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ed80 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20  E_WAL).  ){.    
2ed90 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
2eda0 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  mit || db->nVdbe
2edb0 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20  Read>1 ){.      
2edc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2edd0 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2ede0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2edf0 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2ee00 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2ee10 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2ee20 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2ee30 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2ee40 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2ee50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ee60 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2ee70 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2ee80 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2ee90 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2eea0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2eeb0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2eec0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2eed0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2eee0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2eef0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2ef00 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2ef10 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2ef20 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2ef30 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2ef40 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2ef50 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2ef60 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2ef70 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2ef80 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2ef90 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2efa0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2efb0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2efc0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2efd0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2efe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2eff0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2f000 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2f010 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2f020 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2f030 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2f040 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2f050 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2f060 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2f070 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2f080 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2f090 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2f0a0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2f0b0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2f0c0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2f0d0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2f0e0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2f0f0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2f100 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2f110 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2f120 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2f130 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2f140 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2f150 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2f160 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2f170 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2f180 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2f190 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2f1a0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2f1b0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2f1c0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2f1d0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2f1e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2f1f0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2f200 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2f210 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2f220 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2f230 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2f240 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2f250 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2f260 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2f270 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2f280 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2f290 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2f2a0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2f2b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2f2c0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2f2d0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2f2e0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2f2f0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2f300 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2f310 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2f320 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2f330 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2f340 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2f350 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2f360 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2f370 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2f380 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2f390 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2f3a0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2f3b0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2f3c0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2f3d0 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2f3e0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2f3f0 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2f400 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2f410 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2f420 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2f430 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2f440 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2f450 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2f460 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2f470 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2f480 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2f490 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2f4a0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2f4b0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2f4c0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2f4d0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2f4e0 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2f4f0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2f500 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2f510 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2f520 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
2f530 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2f540 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2f550 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
2f560 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
2f570 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2f580 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2f590 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2f5a0 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
2f5b0 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
2f5c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
2f5d0 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
2f5e0 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
2f5f0 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
2f600 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
2f610 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
2f620 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
2f630 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
2f640 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
2f650 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
2f660 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2f670 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2f680 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2f690 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
2f6a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2f6b0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
2f6c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f6d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2f6e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2f6f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2f700 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2f710 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2f720 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f730 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
2f740 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2f750 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
2f760 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
2f770 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
2f780 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
2f790 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
2f7a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2f7b0 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d  DONE ){.    pc =
2f7c0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2f7d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2f7e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2f7f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
2f800 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
2f810 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
2f820 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
2f830 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
2f840 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
2f850 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2f860 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
2f870 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
2f880 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
2f890 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
2f8a0 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
2f8b0 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
2f8c0 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
2f8d0 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
2f8e0 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
2f8f0 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
2f900 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
2f910 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
2f920 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
2f930 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
2f940 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
2f950 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2f960 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
2f970 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
2f980 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
2f990 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
2f9a0 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
2f9b0 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
2f9c0 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
2f9d0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2f9e0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
2f9f0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
2fa00 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
2fa10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
2fa20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2fa30 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
2fa40 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
2fa50 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
2fa60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
2fa70 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
2fa80 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
2fa90 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
2faa0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
2fab0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2fac0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
2fad0 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
2fae0 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
2faf0 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
2fb00 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
2fb10 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2fb20 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
2fb30 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
2fb40 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
2fb50 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
2fb60 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
2fb70 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
2fb80 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
2fb90 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
2fba0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
2fbb0 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
2fbc0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
2fbd0 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
2fbe0 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
2fbf0 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
2fc00 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
2fc10 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
2fc20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
2fc30 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
2fc40 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
2fc50 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
2fc60 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
2fc70 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
2fc80 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
2fc90 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
2fca0 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
2fcb0 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
2fcc0 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
2fcd0 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
2fce0 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
2fcf0 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
2fd00 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
2fd10 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
2fd20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2fd30 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2fd40 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
2fd50 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
2fd60 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
2fd70 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
2fd80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
2fd90 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
2fda0 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
2fdb0 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
2fdc0 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
2fdd0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
2fde0 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
2fdf0 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
2fe00 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
2fe10 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2fe20 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
2fe30 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
2fe40 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
2fe50 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
2fe60 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2fe70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2fe80 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
2fe90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fea0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2feb0 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
2fec0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2fed0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
2fee0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
2fef0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2ff00 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
2ff10 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
2ff20 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
2ff30 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
2ff40 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2ff50 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
2ff60 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
2ff70 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
2ff80 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
2ff90 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
2ffa0 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
2ffb0 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
2ffc0 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
2ffd0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
2ffe0 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
2fff0 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
30000 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
30010 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
30020 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
30030 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
30040 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
30050 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
30060 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
30070 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30080 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
30090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
300a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
300b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
300c0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
300d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
300e0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
300f0 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34  Create P1 * * P4
30100 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
30110 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
30120 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
30130 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20  tabase P1. Call 
30140 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
30150 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74  od.** for that t
30160 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
30170 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63  _VCreate: {.  rc
30180 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
30190 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
301a0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  ->p1, pOp->p4.z,
301b0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
301c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
301d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
301e0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
301f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30200 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30210 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
30220 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
30230 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
30240 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
30250 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
30260 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
30270 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
30280 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
30290 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
302a0 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70  _VDestroy: {.  p
302b0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
302c0 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   2;.  rc = sqlit
302d0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
302e0 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
302f0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e  Op->p4.z);.  p->
30300 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
30310 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
30320 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30330 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30340 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
30350 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30360 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30370 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
30380 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
30390 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
303a0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
303b0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
303c0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
303d0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
303e0 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
303f0 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
30400 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
30410 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
30420 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
30430 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
30440 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
30450 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
30460 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
30470 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
30480 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
30490 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
304a0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
304b0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
304c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
304d0 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  );.  pCur = 0;. 
304e0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
304f0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
30500 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
30510 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
30520 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
30530 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
30540 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26    assert(pVtab &
30550 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63  & pModule);.  rc
30560 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
30570 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
30580 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65  ursor);.  sqlite
30590 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
305a0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
305b0 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
305c0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
305d0 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
305e0 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
305f0 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61  lass */.    pVta
30600 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d  bCursor->pVtab =
30610 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20   pVtab;..    /* 
30620 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
30630 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
30640 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  .    pCur = allo
30650 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
30660 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29  p->p1, 0, -1, 0)
30670 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
30680 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
30690 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
306a0 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c  bCursor;.    }el
306b0 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61  se{.      db->ma
306c0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
306d0 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78        pModule->x
306e0 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f  Close(pVtabCurso
306f0 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
30700 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30710 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30720 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30730 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30740 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30750 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
30760 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
30770 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
30780 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
30790 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
307a0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
307b0 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
307c0 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
307d0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
307e0 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
307f0 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
30800 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
30810 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
30820 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
30830 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
30840 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
30850 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
30860 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
30870 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
30880 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
30890 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
308a0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
308b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
308c0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
308d0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
308e0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
308f0 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
30900 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
30910 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
30920 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
30930 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
30940 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
30950 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
30960 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
30970 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
30980 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
30990 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
309a0 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
309b0 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
309c0 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
309d0 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
309e0 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
309f0 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
30a00 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
30a10 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
30a20 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
30a30 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
30a40 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
30a50 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
30a60 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
30a70 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
30a80 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
30a90 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
30aa0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
30ab0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
30ac0 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
30ad0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
30ae0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
30af0 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
30b00 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
30b10 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
30b20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
30b30 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30b40 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
30b50 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
30b60 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
30b70 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
30b80 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  uery = &aMem[pOp
30b90 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
30ba0 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
30bb0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
30bc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
30bd0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51  t( memIsValid(pQ
30be0 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53  uery) );.  REGIS
30bf0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
30c00 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
30c10 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
30c20 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
30c30 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
30c40 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
30c50 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
30c60 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
30c70 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
30c80 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
30c90 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
30ca0 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
30cb0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
30cc0 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
30cd0 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
30ce0 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
30cf0 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
30d00 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
30d10 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
30d20 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
30d30 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
30d40 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
30d50 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65  od */.  {.    re
30d60 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67  s = 0;.    apArg
30d70 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
30d80 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
30d90 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
30da0 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
30db0 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20  c[i+1];.    }.. 
30dc0 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
30dd0 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
30de0 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
30df0 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
30e00 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
30e10 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
30e20 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
30e30 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  hod = 0;.    sql
30e40 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
30e50 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
30e60 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30e70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
30e80 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
30e90 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
30ea0 0a 20 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42  .    }.    VdbeB
30eb0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
30ec0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
30ed0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
30ee0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
30ef0 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e   }.  }.  pCur->n
30f00 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62  ullRow = 0;..  b
30f10 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30f20 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30f30 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30f40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30f50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30f60 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
30f70 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mn P1 P2 P3 * *.
30f80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
30f90 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
30fa0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
30fb0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
30fc0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
30fd0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
30fe0 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
30ff0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
31000 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
31010 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
31020 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
31030 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
31040 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
31050 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
31060 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
31070 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
31080 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
31090 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
310a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
310b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
310c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
310d0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
310e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
310f0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
31100 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
31110 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
31120 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
31130 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
31140 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
31150 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
31160 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
31170 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31180 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
31190 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
311a0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
311b0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
311c0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
311d0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
311e0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
311f0 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
31200 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
31210 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
31220 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
31230 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
31240 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
31250 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
31260 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
31270 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
31280 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
31290 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
312a0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
312b0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
312c0 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
312d0 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
312e0 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
312f0 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
31300 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31310 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
31320 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
31330 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
31340 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
31350 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
31360 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
31370 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
31380 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
31390 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
313a0 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
313b0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
313c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
313d0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
313e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
313f0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31400 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
31410 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
31420 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
31430 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
31440 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
31450 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
31460 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
31470 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
31480 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
31490 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
314a0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
314b0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
314c0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
314d0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
314e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
314f0 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
31500 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
31510 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
31520 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31530 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
31540 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
31550 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
31560 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
31570 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
31580 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31590 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
315a0 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
315b0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
315c0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
315d0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
315e0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
315f0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
31600 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
31610 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
31620 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
31630 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
31640 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
31650 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
31660 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
31670 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
31680 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
31690 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
316a0 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
316b0 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
316c0 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
316d0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
316e0 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
316f0 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
31700 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
31710 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
31720 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
31730 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
31740 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
31750 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
31760 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
31770 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
31780 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
31790 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61  .  */.  p->inVta
317a0 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
317b0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
317c0 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
317d0 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
317e0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
317f0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31800 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31810 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
31820 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
31830 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
31840 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
31850 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65  sor);.  }.  Vdbe
31860 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
31870 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
31880 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
31890 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
318a0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
318b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
318c0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
318d0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
318e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
318f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31900 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31910 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31920 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31930 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
31940 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
31950 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
31960 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
31970 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
31980 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
31990 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
319a0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
319b0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
319c0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
319d0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
319e0 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
319f0 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
31a00 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31a10 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
31a20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
31a30 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
31a40 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31a50 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
31a60 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
31a70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
31a80 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
31a90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31aa0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
31ab0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
31ac0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
31ad0 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
31ae0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
31af0 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
31b00 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
31b10 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
31b20 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
31b30 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
31b40 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
31b50 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
31b60 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
31b70 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
31b80 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
31b90 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
31ba0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
31bb0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
31bc0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31bd0 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
31be0 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
31bf0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
31c00 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
31c10 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
31c20 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
31c30 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69  me->z);.    sqli
31c40 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
31c50 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
31c60 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
31c70 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
31c80 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
31c90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31ca0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31cb0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
31cc0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
31cd0 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
31ce0 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
31cf0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31d00 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31d10 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
31d20 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
31d30 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
31d40 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
31d50 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
31d60 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
31d70 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
31d80 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
31d90 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
31da0 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
31db0 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
31dc0 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
31dd0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
31de0 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
31df0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
31e00 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
31e10 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
31e20 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
31e30 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
31e40 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
31e50 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
31e60 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
31e70 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
31e80 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
31e90 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
31ea0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
31eb0 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
31ec0 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
31ed0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
31ee0 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
31ef0 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
31f00 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
31f10 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
31f20 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
31f30 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
31f40 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
31f50 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
31f60 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
31f70 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
31f80 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
31f90 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
31fa0 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
31fb0 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
31fc0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
31fd0 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
31fe0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
31ff0 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
32000 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
32010 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
32020 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
32030 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
32040 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
32050 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
32060 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
32070 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
32080 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
32090 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
320a0 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
320b0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
320c0 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
320d0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
320e0 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
320f0 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
32100 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
32110 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
32120 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
32130 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
32140 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
32150 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
32160 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
32170 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
32180 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
32190 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
321a0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
321b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
321c0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
321d0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
321e0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
321f0 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
32200 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
32210 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
32220 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  X;..  assert( pO
32230 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20  p->p2==1        
32240 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46  || pOp->p5==OE_F
32250 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35  ail   || pOp->p5
32260 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20  ==OE_Rollback . 
32270 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
32280 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f  ==OE_Abort || pO
32290 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
322a0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
322b0 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61  Replace.  );.  a
322c0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
322d0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62  ly==0 );.  pVtab
322e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
322f0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
32300 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
32310 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
32320 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
32330 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
32340 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
32350 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
32360 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
32370 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
32380 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
32390 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
323a0 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
323b0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
323c0 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
323d0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
323e0 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
323f0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32400 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
32410 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
32420 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
32430 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
32440 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
32450 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
32460 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
32470 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
32480 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
32490 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
324a0 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
324b0 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
324c0 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
324d0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73  nConflict;.    s
324e0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
324f0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
32500 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
32510 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
32520 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
32530 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
32540 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
32550 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
32560 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
32570 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
32580 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
32590 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
325a0 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
325b0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70  _CONSTRAINT && p
325c0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43  Op->p4.pVtab->bC
325d0 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20  onstraint ){.   
325e0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d     if( pOp->p5==
325f0 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
32600 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
32610 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
32620 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72  {.        p->err
32630 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70  orAction = ((pOp
32640 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
32650 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70  ) ? OE_Abort : p
32660 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d  Op->p5);.      }
32670 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
32680 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
32690 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
326a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
326b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
326c0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
326d0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
326e0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
326f0 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
32700 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
32710 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
32720 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
32730 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
32740 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
32750 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
32760 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
32770 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
32780 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
32790 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
327a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
327b0 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
327c0 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
327d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
327e0 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
327f0 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
32800 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  MAS./* Opcode: M
32810 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33  axPgcnt P1 P2 P3
32820 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74   * *.**.** Try t
32830 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75  o set the maximu
32840 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72  m page count for
32850 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
32860 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e  the value in P3.
32870 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74  .** Do not let t
32880 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
32890 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77  count fall below
328a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67   the current pag
328b0 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64  e count and.** d
328c0 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
328d0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
328e0 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  unt value if P3=
328f0 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  =0..**.** Store 
32900 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
32910 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65   count after the
32920 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73   change in regis
32930 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
32940 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20  OP_MaxPgcnt: {  
32950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
32960 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
32970 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
32980 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
32990 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  pBt;..  pBt = db
329a0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
329b0 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30  Bt;.  newMax = 0
329c0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
329d0 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20  ){.    newMax = 
329e0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
329f0 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69  Page(pBt);.    i
32a00 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73  f( newMax < (uns
32a10 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20  igned)pOp->p3 ) 
32a20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e  newMax = (unsign
32a30 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a  ed)pOp->p3;.  }.
32a40 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
32a50 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67  lite3BtreeMaxPag
32a60 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d  eCount(pBt, newM
32a70 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ax);.  break;.}.
32a80 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
32a90 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20  de: Init * P2 * 
32aa0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
32ab0 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a  :  Start at P2.*
32ac0 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f  *.** Programs co
32ad0 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69  ntain a single i
32ae0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
32af0 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76 65  opcode as the ve
32b00 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f  ry first.** opco
32b10 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  de..**.** If tra
32b20 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
32b30 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
32b40 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
32b50 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
32b60 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
32b70 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
32b80 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
32b90 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
32ba0 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c  * Or if P4 is bl
32bb0 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72  ank, use the str
32bc0 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20  ing returned by 
32bd0 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a  sqlite3_sql()..*
32be0 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
32bf0 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  t zero, jump to 
32c00 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
32c10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a  */.case OP_Init:
32c20 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a   {          /* j
32c30 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ump */.  char *z
32c40 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Trace;.  char *z
32c50 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  ;..  if( pOp->p2
32c60 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
32c70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69  ->p2 - 1;.  }.#i
32c80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32c90 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62  T_TRACE.  if( db
32ca0 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21  ->xTrace.   && !
32cb0 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
32cc0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
32cd0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
32ce0 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
32cf0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d  !=0.  ){.    z =
32d00 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
32d10 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
32d20 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65  ;.    db->xTrace
32d30 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
32d40 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  z);.    sqlite3D
32d50 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
32d60 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
32d70 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a  USE_FCNTL_TRACE.
32d80 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
32d90 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
32da0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
32db0 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
32dc0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
32dd0 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
32de0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
32df0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
32e00 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20  treeMask, i)==0 
32e10 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
32e20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
32e30 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61  ontrol(db, db->a
32e40 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c  Db[i].zName, SQL
32e50 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c  ITE_FCNTL_TRACE,
32e60 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
32e70 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
32e80 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
32e90 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53  RACE */.#ifdef S
32ea0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
32eb0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
32ec0 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
32ed0 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  =0.   && (zTrace
32ee0 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
32ef0 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
32f00 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
32f10 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
32f20 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
32f30 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
32f40 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
32f50 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
32f60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32f70 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20  OMIT_TRACE */.  
32f80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
32f90 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
32fa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
32fb0 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
32fc0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
32fd0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
32fe0 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
32ff0 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
33000 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
33010 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
33020 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
33030 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
33040 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
33050 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
33060 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
33070 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
33080 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
33090 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
330a0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
330b0 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
330c0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
330d0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
330e0 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
330f0 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
33100 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
33110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
33120 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
33130 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
33140 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
33150 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
33160 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
33170 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
33180 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
33190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
331a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
331b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
331c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
331d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
331e0 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
331f0 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
33200 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
33210 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
33220 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
33230 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
33240 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
33250 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
33260 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
33270 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
33280 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
33290 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
332a0 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
332b0 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
332c0 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
332d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
33320 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
33330 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
33340 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65       u64 endTime
33350 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
33360 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e  ();.      if( en
33370 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f  dTime>start ) pO
33380 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64  p->cycles += end
33390 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20  Time - start;.  
333a0 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a      pOp->cnt++;.
333b0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
333c0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
333d0 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
333e0 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
333f0 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
33400 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
33410 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
33420 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
33430 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
33440 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
33450 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
33460 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
33470 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
33480 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
33490 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
334a0 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
334b0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
334c0 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
334d0 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
334e0 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
334f0 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
33500 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
33510 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
33520 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
33530 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
33540 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
33550 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e  if( rc!=0 ) prin
33560 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29  tf("rc=%d\n",rc)
33570 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
33580 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
33590 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
335a0 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b  E|OPFLG_OUT2) ){
335b0 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
335c0 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20  rTrace(pOp->p2, 
335d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
335e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
335f0 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
33600 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
33610 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
33620 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26  Trace(pOp->p3, &
33630 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
33640 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
33650 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
33660 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
33670 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
33680 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
33690 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
336a0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
336b0 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
336c0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
336d0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
336e0 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
336f0 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
33700 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
33710 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
33720 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
33730 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
33740 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
33750 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
33760 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
33770 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
33780 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
33790 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
337a0 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
337b0 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
337c0 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
337d0 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
337e0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
337f0 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
33800 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
33810 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
33820 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
33830 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
33840 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
33850 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
33860 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
33870 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
33880 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
33890 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
338a0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
338b0 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
338c0 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
338d0 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
338e0 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
338f0 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
33900 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
33910 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
33920 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
33930 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
33940 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74  = lastRowid;.  t
33950 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70  estcase( nVmStep
33960 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e  >0 );.  p->aCoun
33970 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
33980 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b  TATUS_VM_STEP] +
33990 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a  = (int)nVmStep;.
339a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61    sqlite3VdbeLea
339b0 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  ve(p);.  return 
339c0 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
339d0 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
339e0 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
339f0 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
33a00 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
33a10 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
33a20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
33a30 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
33a40 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
33a50 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
33a60 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
33a70 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
33a80 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
33a90 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
33aa0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
33ab0 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
33ac0 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
33ad0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
33ae0 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
33af0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
33b00 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
33b10 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
33b20 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
33b30 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
33b40 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
33b50 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
33b60 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
33b70 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
33b80 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
33b90 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
33ba0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
33bb0 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
33bc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
33bd0 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
33be0 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
33bf0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
33c00 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
33c10 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
33c20 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
33c30 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
33c40 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
33c50 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
33c60 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
33c70 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
33c80 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
33c90 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
33ca0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
33cb0 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
33cc0 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
33cd0 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
33ce0 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
33cf0 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
33d00 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
33d10 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
33d20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
33d30 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
33d40 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
33d50 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
33d60 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
33d70 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
33d80 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
33d90 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.