/ Hex Artifact Content
Login

Artifact 5d5bde8657b9089d142e0041619ed749955bde27:


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 53  d using the OP_S
17e0: 6f 72 74 65 72 4f 70 65 6e 20 6f 70 63 6f 64 65  orterOpen 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 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 23 69  p = &aOp[pc];.#i
4d50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
4d60: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
4d70: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
4d80: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
4d90: 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  [pc]++;.#endif..
4da0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4db0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4dc0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dd0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4e00: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4e10: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
4e20: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e30: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
4e40: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4e50: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4e60: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4e70: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4e80: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4e90: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4ea0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4eb0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4ec0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4ed0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4ee0: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4ef0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f00: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f20: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4f50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4f60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4f70: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4f90: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4fa0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4fb0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4fc0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4fd0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4fe0: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4ff0: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5000: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5010: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5020: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5030: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5040: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5050: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5060: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5070: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
5080: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
5090: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
50a0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
50b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
50c0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
50d0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
50e0: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
50f0: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5100: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5110: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5130: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5140: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
5150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5160: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5170: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62  );.      if( Vdb
5190: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
51a0: 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
51b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
51c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51d0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51e0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
51f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5200: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5220: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5230: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5240: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5260: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5280: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5290: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52a0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52c0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
52d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
52e0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
53a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
53b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
53c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
53d0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2]) );.      ass
53e0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
53f0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5400: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5410: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5420: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5430: 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
5440: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5450: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5460: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5470: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5480: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
54a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
54b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
54d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
54e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
54f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5500: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5510: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5520: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5550: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55c0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55d0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5600: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5610: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5660: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5670: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
56a0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56b0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 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 0a 2a 2a 20  ************.** 
5720: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5730: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5740: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5750: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5760: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5770: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5780: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5790: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57a0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57b0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57d0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57e0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57f0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5800: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5810: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5820: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5830: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5840: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5850: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5860: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5870: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5880: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5890: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58a0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58b0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58c0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58d0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58e0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58f0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5900: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5910: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5920: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5930: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5940: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5950: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5960: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5970: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5980: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5990: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59b0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59c0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59d0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59e0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59f0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a00: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a10: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a20: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a30: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a40: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a50: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a60: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a70: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a80: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a90: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5aa0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ab0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ac0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ad0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ae0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5af0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b00: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b10: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b20: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b30: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b40: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b50: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b60: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b70: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b80: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b90: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5ba0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bb0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bc0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bd0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5be0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5bf0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c00: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c10: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c20: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c30: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c40: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c70: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c80: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c90: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5ca0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5cb0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cc0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cd0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ce0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5cf0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5d00: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d10: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d20: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d30: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d40: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d50: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d60: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d70: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d80: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d90: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5da0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5db0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5dc0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5de0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 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 2f 0a  **************/.
5e30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e40: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e50: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e60: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e70: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e80: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e90: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5ea0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5eb0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5ec0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ed0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ee0: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
5ef0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
5f00: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
5f10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
5f20: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
5f30: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
5f40: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
5f50: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
5f60: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
5f70: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
5f80: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
5f90: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
5fa0: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
5fb0: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
5fc0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
5fd0: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
5fe0: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
5ff0: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6000: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6010: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6020: 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e   */.  pc = pOp->
6030: 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70  p2 - 1;..  /* Op
6040: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6050: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6060: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6070: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6080: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6090: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
60a0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
60b0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
60c0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
60d0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
60e0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
60f0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6100: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6110: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6120: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6130: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6150: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6160: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6170: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6180: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6190: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
61a0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
61b0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
61c0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
61d0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
61e0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
61f0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6200: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6210: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6220: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6230: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6240: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6260: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6270: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6280: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6290: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
62a0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
62b0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
62c0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
62d0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
62e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
62f0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6300: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6310: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6320: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6330: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6340: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6350: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6360: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6370: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6380: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6390: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
63a0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
63b0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
63c0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
63d0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
63e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
63f0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6400: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6410: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6420: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6430: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6440: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6450: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6460: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6470: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6480: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6490: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
64a0: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
64b0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
64c0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
64d0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
64e0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
64f0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
6500: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
6510: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6520: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6530: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6540: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6550: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6560: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
6570: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
6580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
6590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
65a0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
65b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
65c0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
65d0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
65e0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
65f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6600: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6610: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6630: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6640: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
6650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
6660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
6670: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6680: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
6690: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
66a0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
66b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
66c0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
66d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
66f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6700: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6710: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6720: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6740: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6760: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6770: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6780: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6790: 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20  r P1.  After.** 
67a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
67b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
67c0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  defined..*/.case
67d0: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
67e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
6800: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6810: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6820: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  ==MEM_Int );.  p
6830: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6840: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  .i;.  pIn1->flag
6850: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6860: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6870: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6880: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
68a0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
68b0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
68c0: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
68d0: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
68e0: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
68f0: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6900: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6910: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6920: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6930: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6940: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6950: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6960: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6970: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6980: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6990: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
69a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
69b0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
69c0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
69d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
69e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
69f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6a10: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6a20: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6a40: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6a50: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6a60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6a70: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6a80: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6a90: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6aa0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ab0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6ac0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6ad0: 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  >p2 ) pc = pOp->
6ae0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6af0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6b00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6b10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6b20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6b30: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6b40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6b50: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6b60: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6b70: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6b80: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6b90: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6ba0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6bb0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6bc0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6bd0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
6be0: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6bf0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6c00: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6c10: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c30: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c40: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
6c70: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6c80: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6c90: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6ca0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6cb0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6cd0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6ce0: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6cf0: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6d00: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6d10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6d20: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6d30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6d40: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
6d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6d60: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6d70: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d90: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
6da0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
6db0: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
6dc0: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
6dd0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
6de0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
6df0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6e00: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6e10: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
6e20: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
6e30: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6e40: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
6e50: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
6e60: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6e80: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
6e90: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
6ea0: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
6eb0: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
6ec0: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
6ed0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6ef0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6f00: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6f20: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
6f30: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6f40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6f50: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6f60: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6f70: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6f80: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f90: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
6fa0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
6fb0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6fc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6fd0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6fe0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7000: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7010: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7030: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
7040: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
7050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7060: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
7070: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
7080: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
7090: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
70a0: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
70b0: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
70c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
70d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
70e0: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
70f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7100: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7110: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7120: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7140: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
7150: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
7160: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
7170: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
7180: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
71a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
71b0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
71c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
71d0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
71e0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
71f0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7200: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7210: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7220: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7230: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7240: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7250: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7260: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7270: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7290: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
72a0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
72b0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
72c0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
72d0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
72e0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
72f0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7300: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7320: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7330: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7340: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7350: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7360: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7370: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7380: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7390: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
73a0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
73b0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
73c0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
73d0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
73e0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
73f0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7400: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7410: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7430: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7450: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7460: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7470: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7480: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7490: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
74a0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
74b0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
74c0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
74d0: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
74e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
74f0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7500: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7510: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7520: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7530: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
7540: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
7550: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7560: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
7570: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
7580: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
7590: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
75a0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
75b0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
75c0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
75d0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
75e0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
75f0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7600: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7610: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7620: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7630: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
7640: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
7650: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
7660: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
7670: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
7680: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
7690: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
76a0: 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20  zLogFmt;..  if( 
76b0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
76c0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
76d0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
76e0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
76f0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7700: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7710: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
7720: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
7730: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7740: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7750: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7760: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7770: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7780: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7790: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
77a0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
77b0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
77c0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
77d0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
77e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
77f0: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7800: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7810: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
7820: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7830: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7840: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7850: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7860: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7870: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7880: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7890: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
78a0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
78b0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
78c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
78d0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
78e0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
78f0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7900: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7910: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7920: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7930: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7940: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7950: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
7960: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
7970: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7980: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7990: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
79a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
79b0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
79c0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
79d0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
79e0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
79f0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7a00: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7a20: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7a30: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7a40: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7a50: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7a90: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7aa0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ab0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7ac0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7ad0: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7ae0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7af0: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7b00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b10: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7b20: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7b30: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7b40: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7b50: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7b60: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7b70: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7b80: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7b90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7ba0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7bb0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7bc0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7bd0: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7be0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7bf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7c00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7c10: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7c20: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
7c50: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7c60: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7c70: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7c80: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7c90: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7ca0: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7cb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7cc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7cd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7ce0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7cf0: 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29   failed", zType)
7d00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d10: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
7d20: 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d   zLogFmt, pc, p-
7d30: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7d40: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7d50: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7d60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7d70: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7d80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7d90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7da0: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7db0: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7dc0: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7dd0: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7de0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7df0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e00: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7e10: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e20: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e40: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7e50: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7e60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7e70: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7e80: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7e90: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7ea0: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7eb0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7ec0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7ed0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7ee0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7ef0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7f00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7f10: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7f20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f30: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7f40: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7f50: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7f60: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7f70: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7f80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7f90: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7fa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7fb0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7fc0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7fd0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7fe0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7ff0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8040: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8050: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
8060: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
8080: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
8090: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
80a0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
80b0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
80c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
80e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
80f0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8100: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8110: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8120: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
8160: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
8170: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8180: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
8190: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
81a0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
81b0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
81c0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
81d0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
81e0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
81f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8200: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8210: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8220: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8230: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8240: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8250: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8260: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8270: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8280: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8290: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
82a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
82b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
82c0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
82d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
82e0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
82f0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8300: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8310: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8320: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8330: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8340: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8350: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
8360: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8370: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8380: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8390: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
83a0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
83b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
83c0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
83d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83e0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
83f0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8400: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8420: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8430: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8440: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8450: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8460: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8470: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8480: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8490: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
84a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
84b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
84c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
84d0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
84e0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
84f0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8500: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8510: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8520: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8530: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8540: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8550: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8560: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8570: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8580: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8590: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
85a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
85b0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
85c0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
85d0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
85e0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
85f0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8600: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8610: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8620: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8630: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8640: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8650: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8660: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8670: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8680: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8690: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
86a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
86b0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
86c0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
86d0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
86e0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
86f0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8710: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8720: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8750: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8760: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8770: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8780: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8790: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
87a0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
87b0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
87c0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
87d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
87e0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
87f0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8800: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8810: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8820: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8860: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8870: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
8880: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8890: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
88a0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
88b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
88c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
88d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
88e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
88f0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8910: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8930: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8940: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8960: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8970: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8980: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8990: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
89b0: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
89c0: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72  M_Term;.  }.  br
89d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
89e0: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8a00: 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  :  r[P2..P3]=NUL
8a10: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8a20: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8a30: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8a40: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8a50: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8a60: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8a70: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8a80: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8a90: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8aa0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ab0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8ac0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8ad0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8ae0: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8af0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8b00: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8b10: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8b20: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8b30: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8b40: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8b50: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8b60: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8b70: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8b80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8b90: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8ba0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8bb0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
8bc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8bd0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
8be0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8bf0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
8c00: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
8c10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c30: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
8c40: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
8c50: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
8c60: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
8c70: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
8c80: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
8c90: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
8ca0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8cb0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
8cc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
8cd0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
8d20: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
8d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8d40: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
8d50: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
8d60: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8d70: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8d80: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8d90: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8da0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8db0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8dc0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8de0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8df0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8e00: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
8e10: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
8e20: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
8e30: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
8e40: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
8e50: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
8e60: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8e70: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8e80: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8e90: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8ea0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8eb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ec0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8ed0: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8ee0: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8ef0: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8f00: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f20: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
8f30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8f40: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8f50: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8f60: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8f70: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8f80: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8f90: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8fa0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8fb0: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8fd0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8fe0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ff0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9000: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
9010: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9020: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9030: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9040: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9050: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9060: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9070: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
9090: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
90a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
90b0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
90c0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
90d0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
90e0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
90f0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9100: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9110: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9120: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9130: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9140: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9150: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9160: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9170: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
9180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
9190: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
91a0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
91b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
91c0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
91d0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
91e0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
91f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9200: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
9210: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
9220: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9240: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9250: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9260: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9270: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9280: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9290: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
92b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
92c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
92d0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
92e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
92f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9310: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9320: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9330: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
9340: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9350: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9370: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9380: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9390: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
93a0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
93b0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
93c0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
93d0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
93e0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
93f0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9400: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9410: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9420: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9430: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9440: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9450: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9460: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9480: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9490: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
94a0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
94b0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
94c0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
94d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
94e0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
94f0: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9500: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9510: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9520: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9530: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9540: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9550: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9560: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9570: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9580: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9590: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
95a0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
95b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
95c0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
95d0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
95e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
95f0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9610: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9630: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9640: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9650: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9660: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9670: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9680: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9690: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
96a0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
96b0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
96c0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
96d0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
96e0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
96f0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9700: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9710: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9720: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9730: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9740: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9750: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9760: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9770: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9780: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9790: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
97a0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
97b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
97c0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
97d0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
97e0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
97f0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9800: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9810: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9820: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9830: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9840: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9850: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9870: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9890: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
98a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
98b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
98c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
98f0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9900: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9910: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9930: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9940: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9950: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9960: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9970: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9980: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9990: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
99a0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
99b0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
99c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
99d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
99e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
99f0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9a00: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9a10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9a20: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9a30: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9a40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9a50: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9a60: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9a70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9a80: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9a90: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9aa0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ab0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9ac0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ad0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ae0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9af0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9b00: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9b10: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9b20: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9b30: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9b40: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9b50: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9b60: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9b70: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9b80: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9b90: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9ba0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9bb0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9bc0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9bd0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9be0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9bf0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9c00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c10: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9c20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9c40: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
9c50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9c60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9c70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9c80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c90: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9ca0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9cb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9cc0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9d10: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9d20: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9d30: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
9d40: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
9d50: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
9d60: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9d70: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9d80: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9d90: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9da0: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9db0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9dc0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9dd0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9de0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9df0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9e00: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9e10: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9e20: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9e30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
9e40: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
9e50: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
9e60: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9e70: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9e90: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9ea0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9eb0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9ec0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9ed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ee0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9ef0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9f00: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9f10: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9f20: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9f30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9f40: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9f50: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9f60: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9f70: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9f80: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9f90: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9fa0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9fb0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9fc0: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9fd0: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9fe0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9ff0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a000: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a010: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a020: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a030: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a040: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a050: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a060: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a070: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a080: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a090: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a0a0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a0b0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a0c0: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a0d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a0e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a0f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a100: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a110: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a120: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a130: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a140: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a150: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a160: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a170: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a180: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a190: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a1a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a1b0: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a1c0: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a1d0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a1e0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a1f0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a200: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a210: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a220: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a230: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a240: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a250: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a260: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a270: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a280: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a290: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a2a0: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a2b0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a2c0: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a2d0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a2e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a2f0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a300: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a310: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a320: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a330: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a340: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a350: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a360: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a370: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a380: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a390: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a3a0: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a3b0: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a3d0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a3e0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a3f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a400: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a420: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a430: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a440: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a450: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a460: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a470: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a480: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a490: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a4a0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a4b0: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a4c0: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a4d0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a4e0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a4f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a500: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a510: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a520: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a530: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a540: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a550: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a560: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a570: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a580: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a590: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a5a0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a5b0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a5c0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a5d0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a5e0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a5f0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a600: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a610: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a620: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a630: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a640: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a650: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a660: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a670: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a680: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a690: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a6a0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a6b0: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a6c0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a6d0: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a6f0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a700: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a720: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a730: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a750: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a760: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a770: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a780: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a790: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a7a0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a7b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a7c0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a7e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a7f0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a800: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a810: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a820: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a840: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a850: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a860: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a870: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a880: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a890: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a8a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a8b0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a8c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a8d0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a8e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a8f0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a900: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a910: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a920: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a930: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a940: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a950: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a960: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a970: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a980: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a9a0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a9b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a9d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a9e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a9f0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aa00: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
aa10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
aa20: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
aa30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
aa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
aa70: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
aa80: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
aa90: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
aaa0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
aab0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
aac0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
aad0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
aae0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
aaf0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
ab00: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
ab10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
ab20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
ab30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ab40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
ab50: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
ab60: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
ab70: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
ab80: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab90: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
aba0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
abb0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
abc0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
abd0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
abe0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
abf0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
ac00: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
ac10: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
ac20: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
ac30: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
ac40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
ac50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
ac60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
ac70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
ac80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
ac90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
aca0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
acb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
acc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
acd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
ace0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
acf0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
ad00: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
ad10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad20: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
ad30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad40: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ad60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ad70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ad80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ad90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ada0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
adb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
adc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
add0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
ade0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
adf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
ae10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ae20: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
ae30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ae40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ae50: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae60: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ae70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ae80: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
ae90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aea0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aeb0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aec0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aed0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aee0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aef0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
af00: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
af10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
af30: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
af40: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
af70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af80: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
af90: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
afa0: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
afb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afc0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
afd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
afe0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aff0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b000: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b010: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b020: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b030: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b040: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b050: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b060: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b070: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b080: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b090: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b0a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b0b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b0c0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b0d0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b0e0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b0f0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b100: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b110: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b120: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b130: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b140: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b150: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b160: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b190: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b1a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b1c0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b1d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b1e0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b1f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b200: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b220: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b230: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b240: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b250: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b270: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b280: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b290: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b2a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b2b0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b2c0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b2d0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b2f0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b300: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b310: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b320: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b330: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b340: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b350: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b360: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b370: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b380: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b390: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b3a0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b3c0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b3d0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b3e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b3f0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b400: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b410: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b420: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b430: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b440: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b450: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b460: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b470: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b480: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b490: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b4a0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b4b0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b4c0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b4d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b4e0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b4f0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b500: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b510: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b520: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b530: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b540: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b550: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b560: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b570: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b580: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b590: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b5a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b5b0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b5c0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b5d0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b5e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b5f0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b600: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b610: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b620: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b630: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b650: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b660: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b680: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b690: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b6a0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b6b0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b6c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6d0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b6e0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b6f0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b700: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b710: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b720: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b730: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b740: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b750: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b760: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b770: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b780: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b790: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b7a0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b7b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b7c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b7d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b7e0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b7f0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b800: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b810: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b820: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b830: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b840: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b850: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b860: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b870: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b880: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b890: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b8a0: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b8b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b8c0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b8d0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b8e0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b8f0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b900: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b910: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b920: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b930: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b940: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b950: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b960: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b970: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b980: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b990: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b9a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9b0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b9c0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b9d0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b9e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b9f0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
ba00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
ba10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
ba20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ba30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ba40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
ba50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ba60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
ba70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
ba80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
ba90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
baa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bab0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bac0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bad0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bae0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
baf0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bb00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
bb10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bb20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
bb30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
bb40: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bb50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bb60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bb70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bb80: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
bb90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
bba0: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
bbb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bbc0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bbd0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
bbe0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
bbf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
bc00: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
bc10: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
bc20: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
bc30: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
bc40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc50: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
bc60: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
bc70: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
bc80: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
bc90: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
bca0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bcb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
bcc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bcd0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
bce0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
bcf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bd00: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
bd10: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
bd20: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
bd30: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
bd40: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
bd50: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
bd60: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
bd70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
bd80: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
bd90: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
bda0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
bdb0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
bdc0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
bdd0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
bde0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
bdf0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
be00: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
be10: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
be20: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
be30: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
be40: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
be50: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
be60: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
be70: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
be80: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
be90: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
bea0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
bec0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
bed0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bee0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
bef0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
bf00: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
bf10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
bf20: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
bf30: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
bf40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
bf50: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
bf60: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
bf70: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
bf80: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
bf90: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
bfa0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
bfb0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
bfc0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
bfd0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
bfe0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
bff0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c000: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c010: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c020: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c030: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c040: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c050: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c060: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c070: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c080: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
c090: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
c0a0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
c0b0: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
c0c0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c0d0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
c0e0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
c0f0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c100: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c110: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c120: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
c130: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
c140: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
c150: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c160: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
c170: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
c180: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
c190: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c1a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
c1b0: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
c1c0: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
c1d0: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
c1e0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
c1f0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
c200: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
c210: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
c220: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
c230: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c240: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
c250: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
c260: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c270: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c280: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
c290: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
c2a0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
c2b0: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
c2c0: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
c2d0: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
c2e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
c2f0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
c300: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
c310: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
c320: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
c330: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
c340: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
c350: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
c360: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
c370: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
c380: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
c390: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
c3a0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
c3b0: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
c3c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
c3d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
c3e0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c3f0: 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74  r) );.  ctx.pOut
c400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
c410: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
c420: 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75  hange(p, ctx.pOu
c430: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
c440: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
c450: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
c460: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
c470: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
c480: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
c490: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
c4a0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
c4b0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
c4c0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
c4d0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
c4e0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
c4f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
c500: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
c510: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
c520: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
c530: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
c540: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
c550: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
c560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c570: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
c580: 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  );.  ctx.pFunc =
c590: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
c5a0: 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a    ctx.iOp = pc;.
c5b0: 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
c5c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c5d0: 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f  g(ctx.pOut, MEM_
c5e0: 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72  Null);.  ctx.fEr
c5f0: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
c600: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
c610: 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63  lastRowid;.  (*c
c620: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
c630: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
c640: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
c650: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73  5-23230 */.  las
c660: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
c670: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65  tRowid;  /* Reme
c680: 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67  mber rowid chang
c690: 65 73 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63  es made by xFunc
c6a0: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
c6b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
c6c0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
c6d0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
c6e0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72  */.  if( ctx.fEr
c6f0: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
c700: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
c710: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c720: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
c730: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
c740: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
c750: 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a  ext(ctx.pOut));.
c760: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
c770: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
c780: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
c790: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
c7a0: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
c7b0: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
c7c0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7d0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
c7e0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
c7f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
c800: 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20  oding(ctx.pOut, 
c810: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c820: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
c830: 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74 29 20  ooBig(ctx.pOut) 
c840: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
c850: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49  big;.  }..  REGI
c860: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
c870: 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20  p3, ctx.pOut);. 
c880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c890: 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a  SIZE(ctx.pOut);.
c8a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c8b0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
c8c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c8d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c8e0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
c8f0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c900: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
c910: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c920: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c930: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c990: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c9a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c9b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c9c0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c9d0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c9e0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c9f0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ca00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
ca10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ca20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ca30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ca40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ca60: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
ca70: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
ca80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca90: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
caa0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
cab0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
cac0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
cad0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
cae0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
caf0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
cb00: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
cb10: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
cb20: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
cb30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
cb40: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
cb50: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
cb60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cb70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
cb80: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
cb90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cba0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
cbb0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
cbc0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
cbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cbe0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
cbf0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
cc00: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
cc10: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
cc20: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
cc30: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
cc40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc50: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc60: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc70: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cc90: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
cca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ccb0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
ccc0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ccd0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cd00: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
cd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd20: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
cd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd40: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
cd50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd60: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
cd70: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
cd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
cd90: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cda0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
cdb0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
cdc0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
cdd0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cde0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
cdf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ce00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
ce10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
ce20: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
ce30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
ce40: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
ce50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ce60: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
ce70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
ce80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
ce90: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
cea0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
ceb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
cec0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
ced0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
cee0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
cef0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
cf00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
cf10: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
cf20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
cf30: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
cf40: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
cf50: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
cf60: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
cf70: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
cf80: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
cf90: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
cfa0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
cfb0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
cfc0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
cfd0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
cfe0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
cff0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d000: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d010: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d020: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d030: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d040: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d050: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d060: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d070: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d080: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d090: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d0a0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d0b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d0c0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
d0d0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
d0e0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
d0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
d100: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
d110: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
d120: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
d130: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
d140: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
d150: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
d160: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
d170: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
d180: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
d190: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
d1a0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
d1b0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
d1c0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
d1d0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
d1e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d1f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d200: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
d210: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
d220: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d230: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d240: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d250: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d260: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d270: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d280: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d290: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d2a0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d2b0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d2c0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d2d0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d2e0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d2f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d300: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d310: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d320: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d330: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d340: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d350: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d360: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d370: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d380: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d390: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d3a0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d3c0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d3d0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d3e0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d3f0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d400: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d410: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d420: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d430: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d440: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d450: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d460: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d470: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d480: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d490: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d4a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d4b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d4c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d4d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d4f0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d500: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d510: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d520: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d530: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d540: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d550: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d560: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d580: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d590: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d5a0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d5b0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d5c0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d5d0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d5e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d5f0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
d600: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
d610: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d620: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d630: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d640: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d650: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d660: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d670: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d680: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d690: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d6a0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d6b0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d6c0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d6d0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d6e0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d6f0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d700: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d710: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d720: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d730: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d740: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d750: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d760: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d770: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d780: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d790: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d7a0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d7b0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d7c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d7d0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d7e0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d7f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d800: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d810: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d820: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d830: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d840: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d850: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d860: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d880: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d890: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
d8a0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d8b0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
d8c0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
d8d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d8e0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
d8f0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
d900: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
d910: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
d920: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
d930: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
d940: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
d950: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
d960: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
d970: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
d980: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
d990: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
d9a0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d9b0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d9c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d9d0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
d9f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
da00: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
da10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
da20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
da30: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
da40: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
da50: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
da60: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
da70: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
da80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
da90: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a  ITE_AFF_NONE );.
daa0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
dab0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
dac0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
dad0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dae0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
daf0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
db00: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
db10: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
db20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db30: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
db40: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
db50: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
db60: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
db70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
db80: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
db90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
dba0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
dbb0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
dbc0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dbd0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dbe0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dbf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dc00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dc10: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
dc20: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
dc30: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
dc40: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc50: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
dc60: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dc70: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dc80: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
dc90: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
dca0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
dcb0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
dcc0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
dcd0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
dce0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
dcf0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
dd00: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dd10: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
dd20: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dd30: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
dd40: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dd50: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
dd60: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
dd70: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
dd80: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
dd90: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
dda0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
ddb0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
ddc0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
ddd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
dde0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
ddf0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
de00: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
de10: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
de30: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
de40: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
de50: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
de60: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
de70: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
de80: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
de90: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
dea0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
deb0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
dec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
ded0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
dee0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
def0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
df00: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
df10: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
df20: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
df30: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
df40: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
df50: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
df60: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
df70: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
df80: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
df90: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
dfa0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
dfb0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dfc0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dfd0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dfe0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dff0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e000: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e010: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e020: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e030: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e040: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e050: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e060: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e070: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e080: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e090: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e0a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e0b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e0c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e0d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e0e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e0f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e100: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e110: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e120: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e130: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e140: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e150: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e160: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e170: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e180: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e190: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e1a0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e1b0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e1c0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e1d0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e1e0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e1f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e200: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e210: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e220: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e230: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e240: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e250: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e260: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e270: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e280: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e290: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e2a0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e2b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e2c0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e2d0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e2e0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e2f0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e300: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e310: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e320: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e330: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e340: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e350: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e360: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e370: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e380: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e390: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e3a0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e3b0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e3c0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3d0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e3e0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e3f0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e400: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e410: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e420: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e430: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e440: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e450: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e460: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e470: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e480: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e490: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e4b0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e4c0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e4d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e4e0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e4f0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e500: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e510: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e520: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e530: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e540: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e550: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e560: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e570: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e580: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e590: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e5a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e5b0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e5c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e5d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e5e0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e5f0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e600: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e610: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e620: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e630: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e640: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e650: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e660: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e670: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e680: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e690: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e6a0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e6b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e6c0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e6d0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e6e0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e6f0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e700: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e710: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e720: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e730: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e740: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e750: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e760: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e770: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e780: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e790: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e7a0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e7b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e7c0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e7d0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e7e0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e7f0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e800: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e810: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e820: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e830: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e840: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e850: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e860: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e870: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
e880: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e890: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
e8a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e8b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e8c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e8d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e8e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e8f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e900: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e910: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e920: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e930: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e940: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e950: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e960: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e970: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e980: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e990: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e9a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
e9b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e9c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e9d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e9e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e9f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ea00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ea10: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ea20: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ea30: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ea40: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea50: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea60: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea70: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ea80: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ea90: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
eaa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eab0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
eac0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
ead0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eae0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
eaf0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eb00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
eb30: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eb40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eb60: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
eb70: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
eb80: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
eb90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
eba0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
ebb0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ebc0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ebd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ebe0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ebf0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ec00: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
ec10: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
ec20: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
ec30: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
ec40: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ec50: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
ec60: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ec70: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ec80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ec90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
eca0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ecb0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ecc0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ece0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ecf0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ed00: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ed10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ed20: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ed30: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ed40: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ed50: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ed60: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ed70: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ed80: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ed90: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
eda0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
edb0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
edc0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
edd0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
ede0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
edf0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ee00: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
ee10: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
ee20: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
ee30: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ee40: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ee50: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ee60: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
ee70: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ee80: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
ee90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
eea0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
eeb0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
eec0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
eed0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
eee0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
eef0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
ef00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
ef10: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef20: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
ef30: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
ef40: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
ef50: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ef60: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
ef70: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
ef80: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
ef90: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
efa0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
efb0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
efc0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
efd0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
efe0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
eff0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f000: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f010: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f020: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f030: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f040: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f050: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f070: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f080: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f090: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f0a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f0b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f0c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f0d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f0e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f0f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
f100: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f110: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f120: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
f130: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
f140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
f150: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
f160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f170: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f180: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
f190: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f1a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
f1c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
f1d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f1e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f1f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
f200: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
f210: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
f220: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
f230: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
f240: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
f250: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
f260: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
f270: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
f280: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
f290: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f2a0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f2b0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f2c0: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
f2d0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
f2e0: 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n1,0);.      }. 
f2f0: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f300: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
f310: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
f320: 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
f330: 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
f340: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
f350: 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
f360: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
f370: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
f380: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
f390: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f3a0: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
f3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f3c0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f3d0: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f3e0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f3f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f400: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f410: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f420: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f430: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f440: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f450: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
f460: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
f470: 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
f480: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  ags & MEM_Str)==
f490: 30 20 26 26 20 28 70 49 6e 33 2d 3e 66 6c 61 67  0 && (pIn3->flag
f4a0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f4b0: 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
f4c0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f4d0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
f4e0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
f4f0: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
f500: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
f510: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
f520: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
f530: 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64  gify(pIn3, encod
f540: 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  ing, 1);.      }
f550: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
f560: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
f570: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
f580: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
f590: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  ;.    if( pIn1->
f5a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
f5b0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f5c0: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
f5d0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ob(pIn1);.      
f5e0: 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a  flags1 &= ~MEM_Z
f5f0: 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
f600: 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  f( pIn3->flags &
f610: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
f620: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f630: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  mExpandBlob(pIn3
f640: 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20  );.      flags3 
f650: 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
f660: 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
f670: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
f680: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
f690: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
f6a0: 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
f6b0: 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
f6c0: 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68  l);.  }.  switch
f6d0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
f6e0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
f6f0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
f700: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
f710: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
f720: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
f730: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f740: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
f750: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
f760: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f770: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
f780: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
f790: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
f7a0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
f7b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f7c0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
f7d0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
f7e0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
f7f0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f800: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
f810: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
f820: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d  [pOp->p2];.    m
f830: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
f840: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65  p, pOut);.    Me
f850: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
f860: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
f870: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73   pOut->u.i = res
f880: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
f890: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
f8a0: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
f8b0: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f8c0: 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e  n(res!=0, (pOp->
f8d0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f8e0: 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66  EQ)?2:3);.    if
f8f0: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
f900: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
f910: 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e     }.  }.  /* Un
f920: 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d  do any changes m
f930: 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69  ade by applyAffi
f940: 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e  nity() to the in
f950: 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a  put registers. *
f960: 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  /.  pIn1->flags 
f970: 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 49 6e 33  = flags1;.  pIn3
f980: 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
f990: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
f9a0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
f9b0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
f9c0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
f9d0: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
f9e0: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
f9f0: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
fa00: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
fa10: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
fa20: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
fa30: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
fa40: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
fa50: 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68  xt OP_Compare th
fa60: 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50  at has.** the OP
fa70: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
fa80: 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69   set in P5. Typi
fa90: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
faa0: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
fab0: 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69  .** occur immedi
fac0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
fad0: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
fae0: 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
faf0: 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
fb00: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
fb10: 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
fb20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
fb30: 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
fb40: 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
fb50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
fb60: 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
fb70: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fb80: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40   Synopsis: r[P1@
fb90: 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d  P3] <-> r[P2@P3]
fba0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
fbb0: 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
fbc0: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
fbd0: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
fbe0: 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
fbf0: 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
fc00: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
fc10: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
fc20: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
fc30: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
fc40: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
fc50: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
fc60: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
fc70: 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
fc80: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
fc90: 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
fca0: 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
fcb0: 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
fcc0: 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
fcd0: 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
fce0: 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
fcf0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
fd00: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
fd10: 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
fd20: 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
fd30: 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
fd40: 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
fd50: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
fd60: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
fd70: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
fd80: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
fd90: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
fda0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
fdb0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
fdc0: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
fdd0: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
fde0: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
fdf0: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
fe00: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
fe10: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
fe20: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
fe30: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
fe40: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
fe50: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
fe60: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
fe70: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
fe80: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
fe90: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
fea0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
feb0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
fec0: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
fed0: 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
fee0: 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
fef0: 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
ff00: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
ff10: 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
ff20: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
ff30: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
ff40: 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
ff50: 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
ff60: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
ff70: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
ff80: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
ff90: 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
ffa0: 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
ffb0: 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
ffc0: 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
ffd0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
ffe0: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
fff0: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10000 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10010 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10020 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10030 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10040 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
10050 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
10060 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
10070 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
10080 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
10090 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
100a0 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
100b0 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
100c0 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
100d0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
100e0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
100f0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
10100 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10110 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10120 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10130 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
10140 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
10150 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
10160 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
10170 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
10180 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10190 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
101a0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
101b0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
101c0 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
101d0 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
101e0 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
101f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10200 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
10210 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10220 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
10230 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
10240 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10250 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
10260 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
10270 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
10280 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
10290 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
102a0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
102b0 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
102c0 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
102d0 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
102e0 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
102f0 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
10300 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
10310 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
10320 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
10330 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
10340 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
10350 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
10360 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
10370 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
10380 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10390 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
103a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
103b0 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
103c0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
103d0 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
103e0 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
103f0 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
10400 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10410 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10420 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10430 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10440 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10450 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
10460 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
10470 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
10480 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
10490 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
104a0 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
104b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
104c0 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
104d0 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
104e0 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64  pOp->p1 - 1;  Vd
104f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
10500 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  3);.  }else if( 
10510 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
10520 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10530 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10540 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65  Taken(1,3);.  }e
10550 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
10560 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65  p->p3 - 1;  Vdbe
10570 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
10580 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10590 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
105a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
105b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
105c0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
105d0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
105e0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
105f0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10600 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
10610 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
10620 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
10630 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10640 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
10650 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
10660 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10670 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
10680 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
10690 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
106a0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
106b0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
106c0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
106d0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
106e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
106f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10700 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
10710 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10720 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
10730 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
10740 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
10750 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
10760 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
10770 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10780 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
10790 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
107a0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
107b0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
107c0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
107d0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
107e0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
107f0 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
10800 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
10810 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
10820 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
10830 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10840 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
10850 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
10860 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
10870 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10880 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
10890 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
108a0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
108b0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
108c0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
108d0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
108e0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
108f0 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
10900 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10910 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10920 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
10930 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10940 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10950 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10960 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
10970 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
10980 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10990 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
109a0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
109b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
109c0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
109d0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
109e0 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
109f0 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
10a00 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10a10 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
10a20 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
10a30 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
10a40 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10a50 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
10a60 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
10a70 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
10a80 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
10a90 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
10aa0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10ab0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10ac0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
10ad0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
10ae0 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
10af0 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
10b00 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
10b10 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
10b20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
10b30 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
10b40 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10b50 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
10b60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
10b70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
10b80 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10b90 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
10ba0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10bb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
10bc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10bd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
10be0 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
10bf0 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
10c00 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10c10 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
10c20 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
10c30 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
10c40 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
10c50 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
10c60 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10c70 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
10c80 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
10c90 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
10ca0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10cc0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
10cd0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
10ce0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10cf0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
10d00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10d20 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
10d30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10d40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
10d50 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
10d60 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
10d70 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
10d80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10d90 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
10da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10db0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
10dc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
10dd0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
10de0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
10df0 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
10e00 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
10e10 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
10e20 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
10e30 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
10e40 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
10e50 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10e60 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
10e70 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
10e80 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
10e90 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
10ea0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10eb0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
10ec0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
10ed0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10ee0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
10ef0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10f00 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
10f10 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
10f20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
10f30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10f40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
10f50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
10f60 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
10f70 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
10f80 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
10f90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10fa0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
10fb0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
10fc0 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65   Check the "once
10fd0 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31  " flag number P1
10fe0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 2c 20  . If it is set, 
10ff0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
11000 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65  ion P2. .** Othe
11010 72 77 69 73 65 2c 20 73 65 74 20 74 68 65 20 66  rwise, set the f
11020 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
11030 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
11040 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
11050 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
11060 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   this opcode cau
11070 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e  ses all followin
11080 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72  g opcodes up thr
11090 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20  ough P2.** (but 
110a0 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32  not including P2
110b0 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e  ) to run just on
110c0 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69  ce and to be ski
110d0 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  pped on subseque
110e0 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f  nt.** times thro
110f0 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a  ugh the loop..**
11100 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66  .** All "once" f
11110 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c  lags are initial
11120 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65  ly cleared whene
11130 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73  ver a prepared s
11140 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73  tatement.** firs
11150 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e  t begins to run.
11160 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
11170 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11180 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
11190 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  ert( pOp->p1<p->
111a0 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56  nOnceFlag );.  V
111b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
111c0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
111d0 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69  >p1]!=0, 2);.  i
111e0 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  f( p->aOnceFlag[
111f0 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20  pOp->p1] ){.    
11200 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11210 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
11220 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11230 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  1] = 1;.  }.  br
11240 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11250 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
11260 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
11270 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11280 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11290 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
112a0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
112b0 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
112c0 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
112d0 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
112e0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
112f0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
11300 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
11310 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
11320 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20  non-zero..*/./* 
11330 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31  Opcode: IfNot P1
11340 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11350 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11360 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11370 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65  ster P1 is False
11380 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
11390 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61  is considered fa
113a0 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20  lse if it has a 
113b0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
113c0 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76   zero.  If the v
113d0 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
113e0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
113f0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
11400 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
11410 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  n-zero..*/.case 
11420 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20  OP_If:          
11430 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
11440 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in1 */.case OP_I
11450 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fNot: {         
11460 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11470 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49  */.  int c;.  pI
11480 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11490 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
114a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
114b0 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
114c0 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
114d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
114e0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
114f0 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
11500 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11510 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20  1)!=0;.#else.   
11520 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11530 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
11540 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
11550 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
11560 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
11570 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42   !c;.  }.  VdbeB
11580 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c  ranchTaken(c!=0,
11590 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a   2);.  if( c ){.
115a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
115b0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
115c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
115d0 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
115e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
115f0 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67  if r[P1]==NULL g
11600 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
11610 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11620 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11630 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
11640 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
11650 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11660 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
11670 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
11680 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11690 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
116a0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
116b0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
116c0 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)!=0, 2);.  i
116d0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
116e0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
116f0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11700 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
11710 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11720 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
11730 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
11740 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
11750 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
11760 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11770 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11780 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
11790 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
117a0 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
117b0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
117c0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
117d0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
117e0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
117f0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
11800 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11810 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11820 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
11830 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11840 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11850 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11860 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11870 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
11880 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
11890 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
118a0 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  :  r[P3]=PX.**.*
118b0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
118c0 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
118d0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
118e0 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
118f0 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
11900 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
11910 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
11920 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
11930 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
11940 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
11950 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
11960 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
11970 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
11980 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
11990 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
119a0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
119b0 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
119c0 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
119d0 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
119e0 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
119f0 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
11a00 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
11a10 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11a20 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
11a30 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
11a40 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
11a50 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
11a60 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
11a70 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
11a80 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
11a90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11aa0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
11ab0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
11ac0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
11ad0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
11ae0 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
11af0 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
11b00 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
11b10 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
11b20 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
11b30 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
11b40 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
11b50 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
11b60 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
11b70 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
11b80 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
11b90 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
11ba0 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
11bb0 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
11bc0 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
11bd0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
11be0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
11bf0 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
11c00 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
11c10 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
11c20 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
11c30 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
11c40 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
11c50 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
11c60 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
11c70 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
11c80 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
11c90 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
11ca0 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
11cb0 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
11cc0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
11cd0 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
11ce0 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
11cf0 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
11d00 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
11d10 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70  olumn: {.  i64 p
11d20 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
11d30 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11d40 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
11d50 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
11d60 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
11d70 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
11d80 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
11d90 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
11da0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
11db0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
11dc0 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
11dd0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
11de0 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
11df0 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
11e00 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
11e10 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
11e20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
11e30 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
11e40 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
11e50 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
11e60 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
11e70 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
11e80 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
11e90 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
11ea0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
11eb0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
11ec0 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
11ed0 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
11ee0 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
11ef0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
11f00 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
11f10 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11f20 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
11f30 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
11f40 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
11f50 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
11f60 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
11f70 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
11f80 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
11f90 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
11fa0 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
11fb0 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
11fc0 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
11fd0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
11fe0 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
11ff0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
12000 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  he data */.  u32
12010 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20   szField;       
12020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
12030 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e  es in the conten
12040 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  t of a field */.
12050 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20    u32 avail;    
12060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12070 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c  f bytes of avail
12080 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75  able data */.  u
12090 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
120a0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
120b0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
120c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 31 36   header */.  u16
120d0 20 66 78 3b 20 20 20 20 20 20 20 20 20 20 20 20   fx;            
120e0 2f 2a 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20  /* pDest->flags 
120f0 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  value */.  Mem *
12100 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
12110 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
12120 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
12130 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
12140 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12150 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
12160 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
12170 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
12180 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
12190 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
121a0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
121b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
121c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
121d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
121e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
121f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
12200 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
12210 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
12220 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
12230 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23  = pC->aOffset;.#
12240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12250 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
12260 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
12270 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20  tabCursor==0 ); 
12280 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76  /* OP_Column nev
12290 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72  er called on vir
122a0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65  tual table */.#e
122b0 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70  ndif.  pCrsr = p
122c0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
122d0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c  sert( pCrsr!=0 |
122e0 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  | pC->pseudoTabl
122f0 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72  eReg>0 ); /* pCr
12300 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64  sr NULL on Pseud
12310 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73  oTables */.  ass
12320 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c  ert( pCrsr!=0 ||
12330 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20   pC->nullRow ); 
12340 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e           /* pC->
12350 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64  nullRow on Pseud
12360 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a  oTables */..  /*
12370 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
12380 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62  ache is stale, b
12390 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
123a0 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  te */.  rc = sql
123b0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
123c0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
123d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
123e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
123f0 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
12400 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus!=p->cacheCtr
12410 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
12420 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
12430 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b   if( pCrsr==0 ){
12440 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12450 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
12460 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  Reg>0 );.       
12470 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
12480 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12490 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
124a0 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
124b0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
124c0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
124d0 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
124e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
124f0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
12500 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70  zRow = avail = p
12510 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
12520 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
12530 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
12540 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
12550 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
12560 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
12570 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12580 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
12590 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
125a0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
125b0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
125c0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
125d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
125e0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
125f0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12600 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12610 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12620 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
12630 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
12640 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  64);.        ass
12650 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12660 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65  OK ); /* True be
12670 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
12680 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
12690 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a  ve */.        /*
126a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
126b0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
126c0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
126d0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
126e0 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
126f0 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
12700 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
12710 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
12720 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61  be.        ** la
12730 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
12740 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  s. */.        as
12750 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
12760 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
12770 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
12780 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
12790 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
127a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
127b0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
127c0 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43  ail);.        pC
127d0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
127e0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
127f0 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  64;.      }else{
12800 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12810 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
12820 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
12830 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
12840 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
12850 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
12860 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79  (pCrsr, &pC->pay
12870 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
12880 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
12890 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
128a0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
128b0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20  ot fail */.     
128c0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
128d0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
128e0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
128f0 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
12900 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
12910 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
12920 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
12930 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
12940 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
12950 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
12960 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
12970 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
12980 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
12990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
129a0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
129b0 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
129c0 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
129d0 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
129e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
129f0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
12a00 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
12a10 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _big;.      }.  
12a20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68    }.    pC->cach
12a30 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
12a40 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69  heCtr;.    pC->i
12a50 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56  HdrOffset = getV
12a60 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77  arint32(pC->aRow
12a70 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70  , offset);.    p
12a80 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
12a90 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30  0;.    aOffset[0
12aa0 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20  ] = offset;..   
12ab0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
12ac0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
12ad0 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
12ae0 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
12af0 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20  ader..    ** Do 
12b00 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
12b10 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
12b20 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
12b30 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
12b40 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20  ype entries can 
12b50 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
12b60 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20   5 bytes each.  
12b70 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65  But 4 and 5 byte
12b80 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73  .    ** types us
12b90 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73  e so much data s
12ba0 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20  pace that there 
12bb0 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36  can only be 4096
12bc0 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a   and 32 of.    *
12bd0 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
12be0 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
12bf0 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
12c00 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
12c10 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65   a.    ** 3-byte
12c20 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
12c30 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
12c40 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
12c50 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a  lus three.    **
12c60 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
12c70 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
12c80 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
12c90 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
12ca0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
12cb0 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
12cc0 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
12cd0 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
12ce0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
12cf0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
12d00 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12d10 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  mn_error;.    }.
12d20 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f  .    if( avail<o
12d30 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f  ffset ){.      /
12d40 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
12d50 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
12d60 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
12d70 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
12d80 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
12d90 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
12da0 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
12db0 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
12dc0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
12dd0 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
12de0 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
12df0 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
12e00 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
12e10 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
12e20 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
12e30 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
12e40 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
12e50 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
12e60 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20  ->szRow = 0;.   
12e70 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   }..    /* The f
12e80 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73  ollowing goto is
12e90 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
12ea0 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69  .  It can be omi
12eb0 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20  tted and.    ** 
12ec0 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20  everything will 
12ed0 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74  still work.  But
12ee0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65   OP_Column is me
12ef0 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a  asurably faster.
12f00 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
12f10 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
12f20 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
12f30 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
12f40 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  rue..    */.    
12f50 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
12f60 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
12f70 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
12f80 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
12f90 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
12fa0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
12fb0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
12fc0 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
12fd0 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
12fe0 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
12ff0 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
13000 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
13010 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
13020 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
13030 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
13040 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
13050 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
13060 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
13070 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
13080 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
13090 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
130a0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
130b0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
130c0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
130d0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
130e0 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
130f0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
13100 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
13110 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
13120 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
13130 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13140 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
13150 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
13160 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
13170 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
13180 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
13190 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
131a0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
131b0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
131c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
131d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
131e0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
131f0 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
13230 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
13240 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13250 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
13260 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13270 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
13280 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
13290 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
132a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
132b0 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
132c0 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
132d0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
132e0 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
132f0 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
13300 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
13310 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
13320 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64       i = pC->nHd
13330 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f  rParsed;.      o
13340 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b  ffset = aOffset[
13350 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
13360 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
13370 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
13380 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
13390 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
133a0 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
133b0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
133c0 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
133d0 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30        if( zHdr[0
133e0 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  ]<0x80 ){.      
133f0 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b      t = zHdr[0];
13400 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
13410 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
13420 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
13430 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
13440 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
13450 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13460 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d      pC->aType[i]
13470 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
13480 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
13490 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
134a0 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
134b0 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
134c0 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
134d0 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
134e0 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
134f0 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
13500 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26          zHdr = &
13510 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
13520 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
13530 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
13540 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
13550 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
13560 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
13570 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13580 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
13590 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
135a0 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
135b0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ;.      pC->nHdr
135c0 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
135d0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
135e0 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
135f0 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
13600 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
13610 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13620 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
13630 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73  sMem);.        s
13640 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Mem.flags = MEM_
13650 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Null;.      }.  
13660 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
13670 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
13680 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
13690 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
136a0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
136b0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
136c0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
136d0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
136e0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
136f0 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a    **          (z
13700 48 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20  Hdr>zEndHdr).   
13710 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e     ** (2) the en
13720 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20  tire header was 
13730 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c  used but not all
13740 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20   data was used. 
13750 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20       **         
13760 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20   (zHdr==zEndHdr 
13770 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  && offset!=pC->p
13780 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13790 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64    ** (3) the end
137a0 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74   of the data ext
137b0 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20  ends beyond the 
137c0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
137d0 64 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  d..      **     
137e0 20 20 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70       (offset > p
137f0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
13800 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
13810 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
13820 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
13830 64 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43  dr || offset!=pC
13840 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
13850 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
13860 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  t > pC->payloadS
13870 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
13880 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
13890 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
138a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
138b0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
138c0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
138d0 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
138e0 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77  ing to extra new
138f0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
13900 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61  e header, nHdrPa
13910 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73  rsed is.    ** s
13920 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70  till not up to p
13930 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  2, that means th
13940 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  at the record ha
13950 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a  s fewer than p2.
13960 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20      ** columns. 
13970 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77   So the result w
13980 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68  ill be either th
13990 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
139a0 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  or a NULL..    *
139b0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48  /.    if( pC->nH
139c0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
139d0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
139e0 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
139f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13a00 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
13a10 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
13a20 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
13a30 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ic);.      }else
13a40 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
13a50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
13a60 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a  pDest);.      }.
13a70 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
13a80 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
13a90 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
13aa0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f  t the content fo
13ab0 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f  r the p2+1-th co
13ac0 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63  lumn.  Control c
13ad0 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61  an only.  ** rea
13ae0 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66  ch this point if
13af0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f   aOffset[p2], aO
13b00 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64  ffset[p2+1], and
13b10 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61   pC->aType[p2] a
13b20 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
13b30 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
13b40 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
13b50 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
13b60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13b70 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
13b80 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
13b90 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
13ba0 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
13bb0 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
13bc0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
13bd0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13be0 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
13bf0 70 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  p2];.  if( pC->s
13c00 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
13c10 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
13c20 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
13c30 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
13c40 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
13c50 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
13c60 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
13c70 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
13c80 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
13c90 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
13ca0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
13cb0 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
13cc0 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
13cd0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d  , t, pDest);.  }
13ce0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
13cf0 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
13d00 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
13d10 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
13d20 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
13d30 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
13d40 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
13d50 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
13d60 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
13d70 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
13d80 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
13d90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
13da0 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
13db0 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
13dc0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13dd0 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
13de0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
13df0 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
13e00 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
13e10 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
13e20 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
13e30 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
13e40 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
13e50 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
13e60 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
13e70 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
13e80 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
13e90 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
13ea0 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
13eb0 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
13ec0 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
13ed0 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
13ee0 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13ef0 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77  sk.  NULL will w
13f00 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75  ork for the valu
13f10 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20  e for strings.  
13f20 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73      ** and blobs
13f30 20 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73   and whatever is
13f40 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53   in the payloadS
13f50 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20  ize64 variable. 
13f60 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72       ** will wor
13f70 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67  k for everything
13f80 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   else. */.      
13f90 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13fa0 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38  lGet(t<=13 ? (u8
13fb0 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  *)&payloadSize64
13fc0 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b   : 0, t, pDest);
13fd0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13fe0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13ff0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
14000 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
14010 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
14020 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
14050 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
14060 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14070 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14080 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
14090 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
140a0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
140b0 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
140c0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
140d0 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
140e0 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
140f0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74     }.  }.  pDest
14100 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
14110 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
14120 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f  :.  /* If the co
14130 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e  lumn value is an
14140 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
14150 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20  g, go ahead and 
14160 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61  persist.  ** tha
14170 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65  t string in case
14180 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
14190 73 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c  s before the col
141a0 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a  umn value is.  *
141b0 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c  * used.  The fol
141c0 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73  lowing code does
141d0 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
141e0 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  of Deephemeraliz
141f0 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65  e().  ** but doe
14200 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a  s it faster. */.
14210 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c    if( (pDest->fl
14220 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
14230 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20  !=0 && pDest->z 
14240 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73  ){.    fx = pDes
14250 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
14260 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  Str|MEM_Blob);. 
14270 20 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30     assert( fx!=0
14280 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   );.    zData = 
14290 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
142a0 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70  ->z;.    len = p
142b0 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28  Dest->n;.    if(
142c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
142d0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44  learAndResize(pD
142e0 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f  est, len+2) ) go
142f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d  to no_mem;.    m
14300 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20  emcpy(pDest->z, 
14310 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20  zData, len);.   
14320 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
14330 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a   0;.    pDest->z
14340 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  [len+1] = 0;.   
14350 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20   pDest->flags = 
14360 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  fx|MEM_Term;.  }
14370 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
14380 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
14390 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
143a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
143b0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
143c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
143d0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
143e0 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
143f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
14400 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
14410 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
14420 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
14430 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
14440 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
14450 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
14460 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
14470 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14480 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
14490 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
144a0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
144b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
144c0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
144d0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
144e0 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
144f0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
14500 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
14510 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
14520 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
14530 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
14540 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
14550 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
14560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14570 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
14580 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
14590 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
145a0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
145b0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
145c0 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
145d0 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
145e0 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
145f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
14600 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
14610 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
14620 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
14630 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
14640 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
14650 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
14660 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
14670 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
14680 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
14690 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
146a0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
146b0 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
146c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
146d0 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
146e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
146f0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
14700 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
14710 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
14720 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
14730 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
14740 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
14750 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
14760 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
14770 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
14780 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
14790 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
147a0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
147b0 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
147c0 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
147d0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
147e0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
147f0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
14800 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
14810 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
14820 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
14830 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
14840 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
14850 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
14860 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
14870 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
14880 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
14890 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
148a0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
148b0 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
148c0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
148d0 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
148e0 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
148f0 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
14900 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
14910 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
14920 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
14930 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
14940 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
14950 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
14960 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
14970 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
14980 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
14990 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
149a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
149b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
149c0 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
149d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
149e0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
149f0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14a00 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
14a10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14a20 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
14a30 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
14a40 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
14a50 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
14a60 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
14a70 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
14a80 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
14a90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14aa0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14ab0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14ac0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14ad0 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
14ae0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14af0 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
14b00 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
14b10 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
14b20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
14b30 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
14b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
14b50 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
14b60 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
14b70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
14b80 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
14b90 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
14ba0 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
14bb0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
14bc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14bd0 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
14be0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14bf0 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
14c00 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
14c10 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
14c20 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
14c30 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
14c40 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
14c50 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
14c60 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
14c70 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
14c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14c90 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14ca0 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
14cb0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14cd0 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
14ce0 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
14cf0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14d10 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
14d20 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
14d30 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
14d40 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
14d50 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14d60 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14d70 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14d80 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
14dd0 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
14de0 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
14df0 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
14e00 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
14e10 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
14e20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
14e30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14e70 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14e80 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14e90 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14ea0 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
14eb0 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
14ec0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
14ed0 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
14ee0 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
14ef0 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
14f00 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
14f10 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
14f20 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
14f30 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
14f40 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14f50 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14f60 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14f70 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14f80 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14f90 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14fa0 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14fb0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
14fc0 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
14fd0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
14fe0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14ff0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
15000 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
15010 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15020 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
15030 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
15040 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
15050 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15060 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
15070 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15080 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
15090 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
150a0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
150b0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
150c0 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
150d0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
150e0 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
150f0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
15100 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
15110 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
15120 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
15130 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
15140 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
15150 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
15160 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
15170 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
15180 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
15190 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
151a0 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
151b0 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
151c0 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
151d0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
151e0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
151f0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
15200 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
15210 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
15220 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
15230 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
15240 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15250 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
15260 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
15270 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
15280 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
15290 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
152a0 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
152b0 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
152c0 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
152d0 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
152e0 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
152f0 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
15300 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
15310 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
15320 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
15330 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
15340 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
15350 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
15360 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
15370 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
15380 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
15390 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
153a0 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
153b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
153c0 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63  Rec) );.    pRec
153d0 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
153e0 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
153f0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
15400 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
15410 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69  ;.    len = sqli
15420 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15430 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  eLen(serial_type
15440 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
15450 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
15460 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
15470 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
15480 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
15490 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a  pandBlob(pRec);.
154a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
154b0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
154c0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
154d0 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63       len -= pRec
154e0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
154f0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61   }.    }.    nDa
15500 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74  ta += len;.    t
15510 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
15520 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20  type==127 );.   
15530 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
15540 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20  l_type==128 );. 
15550 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61     nHdr += seria
15560 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20  l_type<=127 ? 1 
15570 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  : sqlite3VarintL
15580 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
15590 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52  .  }while( (--pR
155a0 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a  ec)>=pData0 );..
155b0 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
155c0 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20  : R-22564-11647 
155d0 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e  The header begin
155e0 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  s with a single 
155f0 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63  varint.  ** whic
15600 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  h determines the
15610 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
15620 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65   bytes in the he
15630 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74  ader. The varint
15640 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74  .  ** value is t
15650 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68  he size of the h
15660 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69  eader in bytes i
15670 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a  ncluding the siz
15680 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74  e varint.  ** it
15690 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63  self. */.  testc
156a0 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29  ase( nHdr==126 )
156b0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  ;.  testcase( nH
156c0 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28  dr==127 );.  if(
156d0 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20   nHdr<=126 ){.  
156e0 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20    /* The common 
156f0 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72  case */.    nHdr
15700 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   += 1;.  }else{.
15710 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65      /* Rare case
15720 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72   of a really lar
15730 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  ge header */.   
15740 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
15750 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
15760 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e  );.    nHdr += n
15770 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20  Varint;.    if( 
15780 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
15790 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
157a0 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e   nHdr++;.  }.  n
157b0 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74  Byte = nHdr+nDat
157c0 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  a;.  if( nByte>d
157d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
157e0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
157f0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
15800 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
15810 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
15820 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
15830 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
15840 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
15850 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
15860 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
15870 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
15880 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
15890 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
158a0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
158b0 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
158c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
158d0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
158e0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
158f0 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64  ndResize() could
15900 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
15910 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
15920 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
15930 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
15940 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
15950 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  Out, (int)nByte)
15960 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
15970 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
15980 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
15990 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
159a0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
159b0 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
159c0 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
159d0 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72  Hdr);.  j = nHdr
159e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  ;.  assert( pDat
159f0 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70  a0<=pLast );.  p
15a00 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15a10 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  do{.    serial_t
15a20 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d  ype = pRec->uTem
15a30 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  p;.    /* EVIDEN
15a40 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34  CE-OF: R-06529-4
15a50 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74  7362 Following t
15a60 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
15a70 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20  re one or more. 
15a80 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c     ** additional
15a90 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65   varints, one pe
15aa0 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20  r column. */.   
15ab0 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
15ac0 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
15ad0 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
15ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
15af0 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
15b00 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
15b10 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54   R-64536-51728 T
15b20 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61  he values for ea
15b30 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
15b40 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69   record.    ** i
15b50 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
15b60 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  w the header. */
15b70 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
15b80 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
15b90 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
15ba0 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
15bb0 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
15bc0 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
15bd0 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
15be0 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
15bf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
15c00 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
15c10 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
15c20 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
15c30 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
15c40 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
15c50 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
15c60 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
15c70 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
15c80 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
15c90 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
15ca0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
15cb0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
15cc0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
15cd0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
15ce0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
15cf0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15d00 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15d10 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15d20 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15d30 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15d40 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15d50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15d60 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15d70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
15d80 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
15d90 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
15da0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15db0 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
15dc0 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
15dd0 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
15de0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
15df0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
15e00 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
15e10 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15e20 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15e30 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15e40 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15e50 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15e60 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15e70 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15e80 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15e90 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
15ea0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
15eb0 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
15ec0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
15ed0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
15ee0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
15ef0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15f00 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
15f10 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e  Entry);.  pOut->
15f20 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
15f30 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
15f40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
15f50 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
15f60 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
15f70 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
15f80 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
15f90 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
15fa0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
15fb0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
15fc0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
15fd0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
15fe0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
15ff0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
16000 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
16010 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
16020 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
16030 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16040 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
16050 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
16060 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
16090 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
160a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
160c0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
160d0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
160e0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
160f0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
16100 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
16110 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
16120 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
16130 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
16140 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
16150 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
16160 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
16170 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
16180 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
16190 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
161a0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
161b0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
161c0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
161d0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
161e0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
161f0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16200 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
16210 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
16220 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
16230 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
16240 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16250 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
16260 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
16270 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16280 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
16290 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
162a0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
162b0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
162c0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
162d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
162e0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
162f0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16300 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
16310 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16320 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
16330 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
16340 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
16350 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
16360 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
16370 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
16380 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
16390 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
163a0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
163b0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
163c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
163d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
163e0 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
163f0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
16400 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
16410 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16420 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
16430 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
16440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
16450 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
16460 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
16470 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
16480 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
16490 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
164a0 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
164b0 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
164c0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
164d0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
164e0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
164f0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
16500 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
16510 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
16520 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
16530 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
16540 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16550 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
16560 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
16570 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
16580 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
16590 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
165a0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
165b0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
165c0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
165d0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
165e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
165f0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
16600 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
16640 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
16650 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16660 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16670 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16680 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
16690 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
166a0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
166b0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
166c0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
166d0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
166e0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
166f0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
16700 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
16710 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
16720 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
16730 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
16740 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
16750 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
16760 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
16770 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
16780 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
16790 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
167a0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
167b0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
167c0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
167d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
167e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
167f0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
16800 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
16810 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
16820 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16830 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
16840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16850 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16860 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
16870 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
16880 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
16890 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
168a0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
168b0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
168c0 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
168d0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
168e0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
168f0 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
16900 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16910 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
16920 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16930 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
16940 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
16950 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
16960 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
16970 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16980 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
16990 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
169a0 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
169b0 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
169c0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
169d0 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
169e0 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
169f0 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
16a00 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
16a10 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16a20 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
16a30 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
16a40 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
16a50 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
16a60 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
16a70 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
16a80 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
16a90 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
16aa0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
16ab0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
16ac0 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
16ad0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16ae0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16af0 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
16b00 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
16b10 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
16b20 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16b30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
16b40 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16b50 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16b60 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16b70 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
16b80 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
16b90 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
16ba0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
16bb0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
16bc0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
16bd0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
16be0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16bf0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16c00 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
16c10 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61     "cannot relea
16c20 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  se savepoint - S
16c30 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16c40 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20   progress".     
16c50 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
16c60 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16c70 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
16c80 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
16c90 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
16ca0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
16cb0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
16cc0 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
16cd0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
16ce0 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
16cf0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
16d00 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
16d10 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
16d20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
16d30 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
16d40 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16d50 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
16d60 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16d70 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
16d80 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
16d90 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16da0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16db0 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
16dc0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
16dd0 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
16de0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
16df0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16e00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16e10 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16e20 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
16e30 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16e40 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
16e50 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
16e60 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16e70 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16e80 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
16e90 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
16ea0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16eb0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16ec0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16ed0 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16ee0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16ef0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
16f00 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
16f10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16f20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d       int isSchem
16f30 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
16f40 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
16f50 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
16f60 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
16f70 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
16f80 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16f90 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  K ){.          i
16fa0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
16fb0 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
16fc0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
16fd0 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  s)!=0;.         
16fe0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
16ff0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
17000 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
17010 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
17020 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
17030 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20  b[ii].pBt,.     
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52    SQLITE_ABORT_R
17070 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20  OLLBACK,.       
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d  isSchemaChange==
170b0 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
170c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
170d0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
170e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
170f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17100 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17110 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
17120 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
17130 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
17140 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
17150 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
17160 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17170 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
17180 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
17190 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
171a0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
171b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
171c0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
171d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
171e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
171f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
17200 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
17210 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
17220 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
17230 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
17240 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
17250 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
17260 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
17270 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
17280 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
17290 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
172a0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
172b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
172c0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
172d0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
172e0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
172f0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
17300 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
17310 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
17320 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
17330 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
17340 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
17350 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
17360 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
17370 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
17380 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
17390 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
173a0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
173b0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
173c0 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
173d0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
173e0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
173f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
17400 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
17410 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
17420 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
17430 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
17440 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
17450 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
17460 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
17470 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
17480 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
17490 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
174a0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
174b0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
174c0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
174d0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
174e0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
174f0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
17500 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
17510 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
17520 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17530 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
17540 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
17550 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
17560 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
17570 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
17580 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
17590 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
175a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
175b0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
175c0 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
175d0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
175e0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
175f0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
17600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17610 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
17620 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
17630 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
17640 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
17650 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
17660 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
17670 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
17680 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
17690 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
176a0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
176b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
176c0 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
176d0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
176e0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
176f0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17700 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17710 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17720 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  }..  break;.}../
17730 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
17740 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
17750 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
17760 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
17770 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
17780 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
17790 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
177a0 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
177b0 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
177c0 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
177d0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
177e0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
177f0 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
17800 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
17810 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
17820 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
17830 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
17840 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
17850 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
17860 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
17870 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
17880 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
17890 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
178a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
178b0 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
178c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
178d0 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
178e0 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e  ck;.  int turnOn
178f0 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  AC;..  desiredAu
17900 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
17910 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
17920 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72  = pOp->p2;.  tur
17930 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
17940 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
17950 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
17960 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
17970 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
17980 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17990 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
179a0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
179b0 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
179c0 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
179d0 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74  rt( db->nVdbeAct
179e0 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  ive>0 );  /* At 
179f0 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
17a00 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20  M is active */. 
17a10 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17a20 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a  eader );..#if 0.
17a30 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
17a40 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & iRollback && d
17a50 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31  b->nVdbeActive>1
17a60 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
17a70 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
17a80 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c  mplements a ROLL
17a90 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56  BACK and other V
17aa0 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74  Ms are.    ** st
17ab0 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64  ill running, and
17ac0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
17ad0 73 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  s active, return
17ae0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
17af0 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74  ting.    ** that
17b00 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
17b10 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
17b20 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
17b30 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
17b40 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
17b50 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  , "cannot rollba
17b60 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  ck transaction -
17b70 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
17b80 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17b90 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
17ba0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17bb0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
17bc0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
17bd0 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
17be0 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17bf0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
17c00 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
17c10 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
17c20 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
17c30 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
17c40 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
17c50 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
17c60 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
17c70 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
17c80 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
17c90 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17ca0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17cb0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d  db, "cannot comm
17cc0 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d  it transaction -
17cd0 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20   ".        "SQL 
17ce0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17cf0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63  ogress");.    rc
17d00 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17d10 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
17d20 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
17d30 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
17d40 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
17d50 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
17d60 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
17d70 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
17d80 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
17d90 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
17da0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
17db0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
17dc0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
17dd0 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
17de0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
17df0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
17e00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
17e10 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17e20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17e30 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17e40 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
17e50 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66  Commit;.      if
17e60 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
17e70 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
17e80 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Y ){.        p->
17e90 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
17ea0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17eb0 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
17ec0 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
17ed0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17ee0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17ef0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
17f00 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
17f10 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
17f20 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
17f30 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
17f40 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
17f50 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
17f60 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
17f70 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
17f80 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
17f90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
17fa0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
17fb0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
17fc0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
17fd0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
17fe0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17ff0 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20  rrMsg, db,.     
18000 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
18010 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
18020 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
18030 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
18040 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
18050 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
18060 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
18070 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18080 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
180b0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
180c0 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
180d0 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
180e0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
180f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
18100 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
18110 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  action P1 P2 P3 
18120 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69  P4 P5.**.** Begi
18130 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
18140 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69  on database P1 i
18150 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
18160 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a  is not already.*
18170 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20  * active..** If 
18180 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
18190 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
181a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
181b0 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a  ted, or if a .**
181c0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
181d0 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74  n is already act
181e0 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61  ive, it is upgra
181f0 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74  ded to a write-t
18200 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49  ransaction..** I
18210 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
18220 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61  en a read-transa
18230 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
18240 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
18250 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
18260 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20  atabase file on 
18270 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61  which the transa
18280 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72  ction is.** star
18290 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73  ted.  Index 0 is
182a0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
182b0 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65  se file and inde
182c0 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69  x 1 is the.** fi
182d0 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
182e0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49  orary tables.  I
182f0 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d  ndices of 2 or m
18300 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72  ore are used for
18310 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74  .** attached dat
18320 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  abases..**.** If
18330 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
18340 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
18350 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65  and the Vdbe.use
18360 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61  sStmtJournal fla
18370 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68  g is.** true (th
18380 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  is flag is set i
18390 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d  f the Vdbe may m
183a0 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20  odify more than 
183b0 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a  one row and may.
183c0 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ** throw an ABOR
183d0 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20  T exception), a 
183e0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
183f0 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62  ction may also b
18400 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72  e opened..** Mor
18410 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  e specifically, 
18420 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
18430 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  saction is opene
18440 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61  d iff the databa
18450 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
18460 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f   is currently no
18470 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  t in autocommit 
18480 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72  mode, or if ther
18490 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61  e are other.** a
184a0 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
184b0 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72  . A statement tr
184c0 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73  ansaction allows
184d0 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64   the changes mad
184e0 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42  e by this.** VDB
184f0 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
18500 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
18510 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
18520 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
18530 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
18540 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
18550 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
18560 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
18570 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
18580 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
18590 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
185a0 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
185b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
185c0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
185d0 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68  e also checks th
185e0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
185f0 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e  against P3.** an
18600 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  d the schema gen
18610 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
18620 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54  against P4..** T
18630 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
18640 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
18650 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
18660 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
18670 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
18680 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
18690 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
186a0 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
186b0 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
186c0 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
186d0 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
186e0 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
186f0 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  a.  If the schem
18700 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50  a.** cookie in P
18710 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  3 differs from t
18720 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
18730 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
18740 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66   header or.** if
18750 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
18760 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69  ration counter i
18770 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f  n P4 differs fro
18780 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a  m the current.**
18790 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
187a0 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c  ter, then an SQL
187b0 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72  ITE_SCHEMA error
187c0 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65   is raised and e
187d0 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74  xecution.** halt
187e0 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  s.  The sqlite3_
187f0 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66  step() wrapper f
18800 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68  unction might th
18810 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65  en reprepare the
18820 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  .** statement an
18830 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20  d rerun it from 
18840 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a  the beginning..*
18850 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
18860 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
18870 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65   *pBt;.  int iMe
18880 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a  ta;.  int iGen;.
18890 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
188a0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
188b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
188c0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d  ==0 || pOp->p2==
188d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
188e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
188f0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
18900 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
18910 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
18920 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
18930 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
18940 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
18950 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d  ITE_QueryOnly)!=
18960 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
18970 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20  LITE_READONLY;. 
18980 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
18990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
189a0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
189b0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20  pOp->p1].pBt;.. 
189c0 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
189d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
189e0 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c  eBeginTrans(pBt,
189f0 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69   pOp->p2);.    i
18a00 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
18a10 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
18a20 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d  c = pc;.      p-
18a30 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18a40 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18a50 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18a60 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
18a70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18a80 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
18a90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18aa0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
18ab0 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
18ac0 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
18ad0 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
18ae0 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
18af0 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
18b00 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
18b10 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
18b20 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
18b30 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
18b40 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
18b50 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
18b60 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
18b70 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
18b80 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
18b90 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
18ba0 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
18bb0 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
18bc0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
18bd0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
18be0 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
18bf0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
18c00 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
18c10 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
18c20 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
18c30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18c40 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
18c50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
18c60 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
18c70 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
18c80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
18c90 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
18ca0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
18cb0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
18cc0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
18cd0 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
18ce0 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
18cf0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
18d00 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
18d10 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
18d20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
18d30 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
18d40 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
18d50 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
18d60 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
18d70 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18d80 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
18d90 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
18da0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
18db0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a  ImmCons;.    }..
18dc0 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68      /* Gather th
18dd0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
18de0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63   number for chec
18df0 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50  king:.    ** IMP
18e00 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
18e10 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68  R-32195-19465 Th
18e20 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
18e30 20 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69   is used by SQLi
18e40 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74  te.    ** each t
18e50 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65  ime a query is e
18e60 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72  xecuted to ensur
18e70 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72  e that the inter
18e80 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65  nal cache of the
18e90 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75  .    ** schema u
18ea0 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
18eb0 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
18ec0 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
18ed0 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ema of the.    *
18ee0 2a 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  * database again
18ef0 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
18f00 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
18f10 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
18f20 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
18f30 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
18f40 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45  (pBt, BTREE_SCHE
18f50 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32  MA_VERSION, (u32
18f60 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20   *)&iMeta);.    
18f70 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70  iGen = db->aDb[p
18f80 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
18f90 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20  >iGeneration;.  
18fa0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20  }else{.    iGen 
18fb0 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d  = iMeta = 0;.  }
18fc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
18fd0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  p5==0 || pOp->p4
18fe0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
18ff0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
19000 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
19010 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p3 || iGen!=pOp-
19020 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71  >p4.i) ){.    sq
19030 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
19040 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
19050 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
19060 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
19070 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
19080 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29  ma has changed")
19090 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ;.    /* If the 
190a0 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72  schema-cookie fr
190b0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
190c0 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65  file matches the
190d0 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20   cookie .    ** 
190e0 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20  stored with the 
190f0 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73  in-memory repres
19100 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
19110 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a  schema, do.    *
19120 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65  * not reload the
19130 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
19140 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
19150 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
19160 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20   virtual-tables 
19170 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73  are in use, this
19180 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20   is not just an 
19190 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20  optimization..  
191a0 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61    ** Often, v-ta
191b0 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72  bles store their
191c0 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53   data in other S
191d0 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68  QLite tables, wh
191e0 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71  ich.    ** are q
191f0 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68  ueried from with
19200 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f  in xNext() and o
19210 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74  ther v-table met
19220 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a  hods using.    *
19230 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69  * prepared queri
19240 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75  es. If such a qu
19250 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61  ery is out-of-da
19260 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  te, we do not wa
19270 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73  nt to.    ** dis
19280 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73  card the databas
19290 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65  e schema, as the
192a0 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65   user code imple
192b0 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20  menting the.    
192c0 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64  ** v-table would
192d0 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64   have to be read
192e0 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
192f0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
19300 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74   itself.    ** t
19310 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  o be invalidated
19320 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65   whenever sqlite
19330 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c  3_step() is call
19340 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a  ed from within .
19350 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65      ** a v-table
19360 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a   method..    */.
19370 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
19380 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
19390 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21  ->schema_cookie!
193a0 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20  =iMeta ){.      
193b0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
193c0 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
193d0 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  1);.    }.    p-
193e0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
193f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
19400 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
19410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19420 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
19430 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
19440 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
19450 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
19460 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
19470 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
19480 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
19490 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
194a0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
194b0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
194c0 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
194d0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
194e0 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
194f0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
19500 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
19510 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
19520 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
19530 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
19540 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
19550 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
19560 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
19570 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
19580 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
19590 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
195a0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
195b0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
195c0 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
195d0 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
195e0 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
195f0 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
19600 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
19610 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19630 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
19640 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
19650 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
19660 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73   iCookie;..  ass
19670 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
19680 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  r );.  iDb = pOp
19690 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
196a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
196b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
196c0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
196d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
196e0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
196f0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19700 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
19710 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
19720 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
19730 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
19740 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
19750 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
19760 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
19770 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
19780 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
19790 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
197a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
197b0 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
197c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
197d0 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ite the content 
197e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28  of register P3 (
197f0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
19800 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e  n integer).** in
19810 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
19820 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
19830 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68  P1.  P2==1 is th
19840 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
19850 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20  .  .** P2==2 is 
19860 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
19870 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68  mat. P2==3 is th
19880 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
19890 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
198a0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
198b0 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
198c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
198d0 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
198e0 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
198f0 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
19900 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
19910 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
19920 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
19930 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
19940 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
19950 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
19960 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20  OP_SetCookie: { 
19970 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
19980 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
19990 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
199a0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
199b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
199c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
199d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
199e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
199f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19a00 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19a10 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
19a20 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
19a30 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
19a40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
19a50 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
19a60 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19a70 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19a80 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
19a90 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
19aa0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
19ab0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
19ac0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
19ad0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
19ae0 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
19af0 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
19b00 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
19b10 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
19b20 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
19b30 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
19b40 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
19b50 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
19b60 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
19b70 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
19b80 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
19b90 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
19ba0 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
19bb0 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
19bc0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
19bd0 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
19be0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
19bf0 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
19c00 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
19c10 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
19c20 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
19c30 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
19c40 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
19c50 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
19c60 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
19c70 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
19c80 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
19c90 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
19ca0 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
19cb0 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
19cc0 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
19cd0 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
19ce0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
19cf0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
19d00 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
19d10 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
19d20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
19d30 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
19d40 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
19d50 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
19d60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19d70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
19d80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
19d90 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
19da0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
19db0 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
19dc0 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
19dd0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
19de0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
19df0 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
19e00 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
19e10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
19e20 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
19e30 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
19e40 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
19e50 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
19e60 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
19e70 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
19e80 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
19e90 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
19ea0 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
19eb0 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
19ec0 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
19ed0 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19ee0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
19ef0 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
19f00 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
19f10 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
19f20 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
19f30 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
19f40 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
19f50 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
19f60 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
19f70 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
19f80 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
19f90 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
19fa0 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
19fb0 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
19fc0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
19fd0 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
19fe0 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
19ff0 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1a000 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1a010 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1a020 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1a030 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1a040 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1a050 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1a060 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1a070 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1a080 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1a090 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1a0a0 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1a0b0 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1a0c0 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1a0d0 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1a0e0 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1a0f0 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1a100 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1a110 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1a120 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1a130 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1a140 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1a150 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1a160 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1a170 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1a180 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1a190 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1a1a0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1a1b0 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1a1c0 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1a1d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1a1e0 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1a1f0 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1a200 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1a210 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1a220 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1a230 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1a240 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1a250 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1a260 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1a270 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1a280 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1a290 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1a2a0 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1a2b0 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1a2c0 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1a2d0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1a2e0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1a2f0 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1a300 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1a310 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1a320 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1a330 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1a340 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1a350 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1a360 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1a380 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1a390 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1a3a0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1a3b0 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1a3c0 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1a3d0 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1a3e0 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1a3f0 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1a400 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1a410 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1a420 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1a430 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1a440 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1a450 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1a460 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1a470 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1a480 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1a490 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1a4a0 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1a4b0 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1a4c0 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1a4d0 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1a4e0 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1a4f0 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1a500 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1a510 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1a520 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1a530 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1a540 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1a550 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1a560 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1a570 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1a580 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1a590 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1a5a0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1a5b0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1a5c0 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1a5d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1a5e0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a5f0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1a600 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1a610 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1a620 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1a630 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1a640 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1a650 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1a660 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1a670 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1a680 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1a690 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1a6a0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1a6b0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1a6c0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1a6d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1a6e0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1a6f0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1a700 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1a710 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1a720 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1a730 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1a740 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1a750 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1a760 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1a770 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1a780 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1a790 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1a7a0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1a7b0 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1a7c0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1a7d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1a7e0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1a7f0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1a800 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1a810 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1a820 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1a830 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1a840 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1a850 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1a860 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1a870 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1a880 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1a890 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1a8a0 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1a8b0 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1a8c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1a8d0 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1a8e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1a8f0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1a900 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1a910 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1a920 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1a930 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1a940 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1a950 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1a960 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1a970 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1a980 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1a990 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1a9a0 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1a9b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a9c0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1a9d0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1a9e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a9f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1aa00 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1aa10 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1aa20 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1aa30 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1aa40 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1aa50 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1aa60 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1aa70 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1aa80 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1aa90 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1aaa0 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1aab0 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1aac0 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1aad0 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1aae0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1aaf0 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1ab00 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1ab10 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1ab20 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1ab30 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1ab40 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1ab50 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1ab60 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1ab70 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
1ab80 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53  >p5&(OPFLAG_P2IS
1ab90 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  REG|OPFLAG_BULKC
1aba0 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1abb0 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20  ))==pOp->p5 );. 
1abc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1abd0 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1abe0 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30  te || pOp->p5==0
1abf0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1ac00 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1ac10 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1ac20 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1ac30 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1ac40 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f  P_OpenRead || pO
1ac50 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65  p->opcode==OP_Re
1ac60 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20  openIdx.        
1ac70 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79    || p->readOnly
1ac80 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d  ==0 );..  if( p-
1ac90 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20  >expired ){.    
1aca0 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
1acb0 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20  T_ROLLBACK;.    
1acc0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46  break;.  }..  nF
1acd0 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
1ace0 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
1acf0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
1ad00 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1ad10 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1ad20 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1ad30 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1ad40 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1ad50 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d   iDb) );.  pDb =
1ad60 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1ad70 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
1ad80 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
1ad90 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
1ada0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1adb0 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
1adc0 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  g = 1;.    asser
1add0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1ade0 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1adf0 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1ae00 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1ae10 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1ae20 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1ae30 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1ae40 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1ae50 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1ae60 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1ae70 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1ae80 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1ae90 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1aea0 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1aeb0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1aec0 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1aed0 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1aee0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
1aef0 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1af00 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1af10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1af20 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1af30 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1af40 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1af50 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1af60 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1af70 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1af80 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1af90 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1afa0 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1afb0 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1afc0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1afd0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1afe0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1aff0 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1b000 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1b010 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1b020 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1b030 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1b040 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1b050 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1b060 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1b070 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1b080 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b090 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
1b0a0 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
1b0b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
1b0c0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
1b0d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1b0e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b0f0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
1b100 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1b110 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1b120 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1b130 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1b140 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1b150 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1b160 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1b170 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1b180 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1b190 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79  nfo->nField+pKey
1b1a0 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20  Info->nXField;. 
1b1b0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1b1c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1b1d0 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1b1e0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1b1f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b200 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1b210 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1b220 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1b230 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1b240 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1b250 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1b260 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1b270 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1b280 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1b290 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1b2a0 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
1b2b0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1b2c0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1b2d0 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1b2e0 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1b2f0 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1b300 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p2;.  rc = sqlit
1b310 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1b320 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1b330 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
1b340 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1b350 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1b360 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68  nfo;.  /* Set th
1b370 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1b380 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1b390 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1b3a0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1b3b0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1b3c0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1b3d0 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1b3e0 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1b3f0 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1b400 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1b410 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1b420 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1b430 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1b440 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1b450 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1b460 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1b470 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1b480 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f  !=P4_KEYINFO;..o
1b490 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1b4a0 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20  ints:.  assert( 
1b4b0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1b4c0 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1b4d0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1b4e0 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45  AG_SEEKEQ==BTREE
1b4f0 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 73 71  _SEEK_EQ );.  sq
1b500 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b510 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72  Hints(pCur->pCur
1b520 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1b540 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1b550 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1b560 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 62 72  _SEEKEQ)));.  br
1b570 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b580 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1b590 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1b5a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1b5b0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1b5c0 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1b5d0 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1b5e0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1b5f0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1b600 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1b610 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1b620 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1b630 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1b640 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1b650 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1b660 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1b670 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1b680 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1b690 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1b6a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1b6b0 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1b6c0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1b6d0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1b6e0 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1b6f0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1b700 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1b710 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1b720 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1b730 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1b740 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1b750 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1b760 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1b770 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1b780 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1b790 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1b7a0 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1b7b0 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1b7c0 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1b7d0 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1b7e0 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1b7f0 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1b800 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1b810 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1b820 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1b830 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1b840 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1b850 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1b860 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1b870 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1b880 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1b890 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1b8a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1b8b0 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1b8c0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1b8d0 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1b8e0 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1b8f0 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1b900 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1b910 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1b920 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1b930 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1b940 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1b950 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1b960 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1b970 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1b980 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1b990 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1b9a0 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1b9b0 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1b9c0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1b9d0 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1b9e0 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1b9f0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ba00 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1ba10 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1ba20 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1ba30 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1ba40 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1ba50 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1ba60 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1ba70 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1ba80 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1ba90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1baa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bab0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1bac0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1bad0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1bae0 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1baf0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1bb00 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1bb10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1bb20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1bb30 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1bb40 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1bb50 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1bb60 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1bb90 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1bba0 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1bbb0 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1bbc0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1bbd0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1bbe0 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1bbf0 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1bc00 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1bc10 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1bc20 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1bc30 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1bc40 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1bc50 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1bc60 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1bc70 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1bc80 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1bc90 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1bca0 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1bcb0 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1bcc0 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1bcd0 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1bce0 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1bcf0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1bd00 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1bd10 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1bd20 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1bd30 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49  /.    if( (pKeyI
1bd40 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1bd50 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1bd60 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1bd70 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1bd80 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1bd90 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1bda0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1bdb0 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1bdc0 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1bdd0 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1bde0 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1bdf0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1be00 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1be10 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1be20 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1be30 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1be40 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1be50 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1be60 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1be70 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  b) );.        pC
1be80 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1be90 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
1bea0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1beb0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1bec0 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49  , pgno, 1, pKeyI
1bed0 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  nfo, pCx->pCurso
1bee0 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1bef0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1bf00 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1bf10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1bf20 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1bf30 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
1bf40 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70  OT, 1, 0, pCx->p
1bf50 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1bf60 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1bf70 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78  .    }.  }.  pCx
1bf80 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1bf90 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1bfa0 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1bfb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bfc0 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1bfd0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1bfe0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1bff0 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1c000 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1c010 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1c020 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1c030 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1c040 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1c050 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1c060 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1c070 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1c080 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1c090 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1c0a0 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1c0b0 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1c0c0 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1c0d0 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1c0e0 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1c0f0 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1c100 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1c110 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1c120 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1c130 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1c140 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1c150 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1c160 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1c170 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1c180 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c190 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c1a0 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1c1b0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1c1c0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c1d0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1c1e0 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1c1f0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1c200 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1c210 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c220 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1c230 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1c240 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1c250 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1c260 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1c270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1c280 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1c290 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a   pOp->p3, pCx);.
1c2a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c2b0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54  pcode: SequenceT
1c2c0 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  est P1 P2 * * *.
1c2d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28  ** Synopsis: if(
1c2e0 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b   cursor[P1].ctr+
1c2f0 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a  + ) pc = P2.**.*
1c300 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
1c310 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20   cursor. If the 
1c320 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72  sequence counter
1c330 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
1c340 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  ro, jump.** to P
1c350 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  2. Regardless of
1c360 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1c370 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
1c380 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  n, increment the
1c390 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65  .** the sequence
1c3a0 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
1c3b0 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a  OP_SequenceTest:
1c3c0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1c3d0 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
1c3e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c3f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c400 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c410 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1c420 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f 72 74  ssert( pC->pSort
1c430 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  er );.  if( (pC-
1c440 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1c450 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1c460 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1c470 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c480 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
1c490 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1c4a0 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75  ynopsis: P3 colu
1c4b0 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a  mns in r[P2].**.
1c4c0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1c4d0 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
1c4e0 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
1c4f0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
1c500 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1c510 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e  f data.  The con
1c520 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65  tent of that one
1c530 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74   row is the cont
1c540 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  ent of memory.**
1c550 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
1c560 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63  n other words, c
1c570 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73  ursor P1 becomes
1c580 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
1c590 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63  e .** MEM_Blob c
1c5a0 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64  ontent contained
1c5b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
1c5c0 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
1c5d0 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
1c5e0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1c5f0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73  used to hold a s
1c600 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
1c610 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
1c620 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
1c630 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
1c640 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
1c650 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
1c660 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
1c670 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68  lumn opcode.  Th
1c680 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1c690 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c  de.** is the onl
1c6a0 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20  y cursor opcode 
1c6b0 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20  that works with 
1c6c0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1c6d0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20  **.** P3 is the 
1c6e0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
1c6f0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20   in the records 
1c700 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f  that will be sto
1c710 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73  red by.** the ps
1c720 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
1c730 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
1c740 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  o: {.  VdbeCurso
1c750 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1c760 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1c770 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c780 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p3>=0 );.  pCx =
1c790 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1c7a0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1c7b0 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69  >p3, -1, 0);.  i
1c7c0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1c7d0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1c7e0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1c7f0 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  Cx->pseudoTableR
1c800 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  eg = pOp->p2;.  
1c810 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1c820 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c830 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61  >p5==0 );.  brea
1c840 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c850 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
1c860 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
1c870 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
1c880 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
1c890 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
1c8a0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
1c8b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1c8c0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
1c8d0 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
1c8e0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
1c8f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c900 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c910 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1c920 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1c930 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
1c940 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c950 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
1c960 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c970 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1c980 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1c990 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c9a0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c9b0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c9c0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c9d0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c9e0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c9f0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1ca00 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1ca10 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1ca20 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1ca30 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1ca40 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1ca50 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1ca60 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1ca70 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1ca80 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1ca90 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1caa0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1cab0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1cac0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1cad0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1cae0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1caf0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1cb00 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1cb10 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1cb20 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1cb30 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1cb40 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1cb50 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1cb60 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1cb70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1cb80 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1cb90 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1cba0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1cbb0 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1cbc0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1cbd0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1cbe0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1cbf0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1cc00 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1cc10 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1cc20 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1cc30 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1cc40 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1cc50 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1cc60 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1cc70 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33   SeekGT P1 P2 P3
1cc80 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1cc90 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1cca0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1ccb0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1ccc0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1ccd0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1cce0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1ccf0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1cd00 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1cd10 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1cd20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1cd30 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1cd40 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1cd50 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1cd60 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1cd70 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1cd80 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1cd90 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1cda0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1cdb0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1cdc0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1cdd0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1cde0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1cdf0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
1ce00 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1ce10 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1ce20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
1ce30 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1ce40 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1ce50 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1ce60 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1ce70 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1ce80 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1ce90 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1cea0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1ceb0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1cec0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1ced0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1cee0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1cef0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1cf00 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1cf10 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1cf20 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1cf30 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1cf40 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1cf50 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50  Opcode: SeekLT P
1cf60 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a  1 P2 P3 P4 * .**
1cf70 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1cf80 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1cf90 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1cfa0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1cfb0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1cfc0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1cfd0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1cfe0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1cff0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1d000 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1d010 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1d020 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1d030 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1d040 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1d050 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1d060 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1d070 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1d080 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1d090 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1d0a0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1d0b0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1d0c0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1d0d0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1d0e0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1d0f0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1d100 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1d110 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1d120 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1d130 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1d140 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1d150 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1d160 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1d170 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1d180 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1d190 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1d1a0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1d1b0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1d1c0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1d1d0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1d1e0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1d1f0 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  t..**.** See als
1d200 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1d210 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
1d220 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1d230 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20   Opcode: SeekLE 
1d240 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d250 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1d260 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1d270 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1d280 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1d290 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1d2a0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1d2b0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1d2c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1d2d0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1d2e0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1d2f0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1d300 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1d310 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1d320 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1d330 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1d340 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1d350 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1d360 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1d370 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1d380 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1d390 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1d3a0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1d3b0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1d3c0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1d3d0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1d3e0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1d3f0 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1d400 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1d410 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1d420 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1d430 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1d440 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1d450 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1d460 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1d470 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1d480 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1d490 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1d4a0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1d4b0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1d4c0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1d4d0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1d4e0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1d4f0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1d500 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1d510 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1d520 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1d530 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLT:         /* 
1d540 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d550 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20  e OP_SeekLE:    
1d560 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d570 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d580 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGE:         /* 
1d590 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d5a0 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20  e OP_SeekGT: {  
1d5b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d5c0 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1d5d0 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1d5e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1d5f0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1d600 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1d610 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1d620 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1d630 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1d640 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d650 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d660 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1d670 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d680 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1d690 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d6a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d6b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d6c0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1d6d0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1d6e0 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
1d6f0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
1d700 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d710 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
1d720 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1d730 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
1d740 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
1d750 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1d760 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
1d770 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1d780 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  oc = pOp->opc
1d790 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ode;.  pC->nullR
1d7a0 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1d7b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1d7c0 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1d7d0 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
1d7e0 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f    /* For a curso
1d7f0 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  r with the BTREE
1d800 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f  _SEEK_EQ hint, o
1d810 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47  nly the OP_SeekG
1d820 45 20 61 6e 64 0a 20 20 2a 2a 20 4f 50 5f 53 65  E and.  ** OP_Se
1d830 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
1d840 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
1d850 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
1d860 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
1d870 0a 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49  .  ** by an OP_I
1d880 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
1d890 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
1d8a0 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
1d8b0 73 61 6d 65 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23  same key..  */.#
1d8c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1d8d0 55 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  UG.  if( sqlite3
1d8e0 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
1d8f0 6e 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  nt(pC->pCursor, 
1d900 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29  BTREE_SEEK_EQ) )
1d910 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
1d920 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
1d930 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
1d940 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
1d950 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1d960 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
1d970 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
1d980 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
1d990 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1d9a0 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
1d9b0 5d 2e 70 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ].p1 );.    asse
1d9c0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
1d9d0 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
1d9e0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1d9f0 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
1da00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1da10 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e  1].p4.i==pOp[0].
1da20 70 34 2e 69 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  p4.i );.  }.#end
1da30 69 66 0a 20 0a 20 20 69 66 28 20 70 43 2d 3e 69  if. .  if( pC->i
1da40 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1da50 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1da60 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1da70 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1da80 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1da90 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1daa0 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1dab0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1dac0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1dad0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1dae0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1daf0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1db00 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1db10 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1db20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1db30 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1db40 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1db50 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1db60 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1db70 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1db80 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1db90 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1dba0 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1dbb0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1dbc0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1dbd0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1dbe0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1dbf0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1dc00 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1dc10 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1dc20 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1dc30 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1dc40 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1dc50 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1dc60 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1dc70 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1dc80 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1dc90 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1dca0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1dcb0 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1dcc0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1dcd0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1dce0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1dcf0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1dd00 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1dd10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1dd20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  1;  VdbeBranchTa
1dd30 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20  ken(1,2);.      
1dd40 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1dd50 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1dd60 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1dd70 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
1dd80 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1dd90 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1dda0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1ddb0 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
1ddc0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
1ddd0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
1dde0 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
1ddf0 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
1de00 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
1de10 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
1de20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1de30 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
1de40 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
1de50 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
1de60 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
1de70 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
1de80 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
1de90 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
1dea0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1deb0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1dec0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
1ded0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1dee0 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
1def0 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
1df00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1df10 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
1df20 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
1df30 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1df40 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1df50 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1df60 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
1df70 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
1df80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1df90 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1dfa0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
1dfb0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1dfc0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1dfd0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1dfe0 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
1dff0 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
1e000 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
1e010 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
1e020 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1e030 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
1e040 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
1e050 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1e060 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
1e070 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
1e080 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1e090 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
1e0a0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
1e0b0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1e0c0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1e0d0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
1e0e0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1e0f0 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
1e100 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
1e110 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1e120 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1e130 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1e140 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1e150 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
1e160 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
1e170 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
1e180 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  /.    if( rc!=SQ
1e190 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1e1a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e1b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1e1c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69    }else{.    nFi
1e1d0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1e1e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1e1f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1e200 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1e210 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1e220 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1e230 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1e240 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1e250 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1e260 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1e270 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1e280 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1e290 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1e2a0 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1e2b0 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1e2c0 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1e2d0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1e2e0 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = -1;.    **   }
1e2f0 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20  else{.    **    
1e300 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1e310 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20  +1;.    **   }. 
1e320 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61     */.    r.defa
1e330 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28  ult_rc = ((1 & (
1e340 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29  oc - OP_SeekLT))
1e350 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20   ? -1 : +1);.   
1e360 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1e370 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61  SeekGT || r.defa
1e380 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1e390 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1e3a0 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66  _SeekLE || r.def
1e3b0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
1e3c0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1e3d0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65  P_SeekGE || r.de
1e3e0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1e3f0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1e400 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64  OP_SeekLT || r.d
1e410 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
1e420 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  ..    r.aMem = &
1e430 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1e440 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e450 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20  UG.    { int i; 
1e460 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
1e470 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
1e480 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1e490 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
1e4a0 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42  ndif.    ExpandB
1e4b0 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20  lob(r.aMem);.   
1e4c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e4d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1e4e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e4f0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1e500 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e510 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1e520 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e530 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1e540 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1e550 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1e560 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e570 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
1e580 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1e590 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
1e5a0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1e5b0 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
1e5c0 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
1e5d0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
1e5e0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
1e5f0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
1e600 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1e610 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
1e620 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1e630 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1e640 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70  3BtreeNext(pC->p
1e650 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1e660 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1e670 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1e680 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e690 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1e6a0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1e6b0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  }.  }else{.    a
1e6c0 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1e6d0 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLT || oc==OP_S
1e6e0 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28  eekLE );.    if(
1e6f0 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d   res>0 || (res==
1e700 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1e710 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  LT) ){.      res
1e720 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
1e730 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1e740 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1e750 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1e760 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e770 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1e780 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1e790 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
1e7a0 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1e7b0 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1e7c0 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1e7d0 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1e7e0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1e7f0 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1e800 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
1e810 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1e820 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1e830 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1e840 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1e850 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
1e860 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
1e870 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1e880 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e890 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1e8a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1e8b0 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ek P1 P2 * * *.*
1e8c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
1e8d0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
1e8e0 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1e8f0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1e900 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1e910 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1e920 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1e930 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1e940 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1e950 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1e960 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1e970 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1e980 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1e990 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1e9a0 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1e9b0 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1e9c0 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1e9d0 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1e9e0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1e9f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1ea00 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1ea10 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1ea20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1ea30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1ea40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1ea50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1ea60 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1ea70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ea80 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ea90 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1eaa0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1eab0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1eac0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70  ->isTable );.  p
1ead0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1eae0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1eaf0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d  Op->p2];.  pC->m
1eb00 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1eb10 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1eb20 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64  e(pIn2);.  pC->d
1eb30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1eb40 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20  1;.  break;.}.  
1eb50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1eb60 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1eb70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1eb80 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1eb90 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1eba0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1ebb0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1ebc0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1ebd0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1ebe0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1ebf0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1ec00 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1ec10 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1ec20 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1ec30 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1ec40 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1ec50 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1ec60 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1ec70 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1ec80 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1ec90 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1eca0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1ecb0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1ecc0 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1ecd0 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1ece0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
1ecf0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
1ed00 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1ed10 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1ed20 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64   it can be.** ad
1ed30 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f  vanced in the fo
1ed40 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e  rward direction.
1ed50 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72    The Next instr
1ed60 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b  uction will work
1ed70 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65  ,.** but not the
1ed80 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
1ed90 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1eda0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
1edb0 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
1edc0 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
1edd0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
1ede0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
1edf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1ee00 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1ee10 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1ee20 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1ee30 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1ee40 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1ee50 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1ee60 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1ee70 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1ee80 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1ee90 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1eea0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1eeb0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1eec0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1eed0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1eee0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1eef0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1ef00 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
1ef10 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1ef20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1ef30 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
1ef40 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
1ef50 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
1ef60 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
1ef70 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
1ef80 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
1ef90 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
1efa0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1efb0 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
1efc0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1efd0 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
1efe0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1eff0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1f000 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1f010 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1f020 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1f030 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1f040 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1f050 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1f060 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1f070 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
1f080 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
1f090 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
1f0a0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1f0b0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
1f0c0 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  sts, NoConflict.
1f0d0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1f0e0 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
1f0f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1f100 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1f110 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1f120 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1f130 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1f140 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1f150 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1f160 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1f170 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1f180 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1f190 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1f1a0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1f1b0 72 64 2e 20 49 66 20 50 34 3c 30 2c 20 74 68 65  rd. If P4<0, the
1f1c0 6e 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  n P3 holds a blo
1f1d0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1f1e0 20 4d 61 6b 65 52 65 63 6f 72 64 2c 20 62 75 74   MakeRecord, but
1f1f0 0a 2a 2a 20 6f 6e 6c 79 20 74 68 65 20 66 69 72  .** only the fir
1f200 73 74 20 7c 50 34 7c 20 66 69 65 6c 64 73 20 73  st |P4| fields s
1f210 68 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  hould be conside
1f220 72 65 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  red..** .** Curs
1f230 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1f240 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1f250 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1f260 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1f270 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
1f280 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
1f290 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f2a0 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
1f2b0 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
1f2c0 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
1f2d0 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
1f2e0 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
1f2f0 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
1f300 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
1f310 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
1f320 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
1f330 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
1f340 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
1f350 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
1f360 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
1f370 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
1f380 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
1f390 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
1f3a0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
1f3b0 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
1f3c0 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
1f3d0 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
1f3e0 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
1f3f0 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
1f400 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
1f410 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
1f420 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
1f430 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
1f440 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
1f450 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
1f460 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1f470 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1f480 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1f490 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
1f4a0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
1f4b0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1f4c0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f4d0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
1f4e0 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
1f4f0 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
1f500 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
1f510 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1f520 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  und, Found, NotE
1f530 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50  xists.*/.case OP
1f540 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20  _NoConflict:    
1f550 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f560 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1f570 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1f580 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f590 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1f5a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f5b0 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1f5c0 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  ists;.  int ii;.
1f5d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f5e0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
1f5f0 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e  har *pFree;.  Un
1f600 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
1f610 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65  dxKey;.  Unpacke
1f620 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61  dRecord r;.  cha
1f630 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44  r aTempRec[ROUND
1f640 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65  8(sizeof(Unpacke
1f650 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65  dRecord)) + size
1f660 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a  of(Mem)*4 + 7];.
1f670 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1f680 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
1f690 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
1f6a0 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
1f6b0 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
1f6c0 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
1f6d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f6e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f6f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1f700 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1f710 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1f720 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f730 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f740 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1f750 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1f760 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1f770 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
1f780 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1f790 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
1f7a0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1f7b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f7c0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46  Table==0 );.  pF
1f7d0 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ree = 0;  /* Not
1f7e0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
1f7f0 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
1f800 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
1f810 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ng. */.  if( pOp
1f820 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1f830 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1f840 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1f850 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
1f860 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
1f870 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20  aMem = pIn3;.   
1f880 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
1f890 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1f8a0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
1f8b0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1f8c0 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78  ii]) );.      Ex
1f8d0 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d  pandBlob(&r.aMem
1f8e0 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51  [ii]);.#ifdef SQ
1f8f0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1f900 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
1f910 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1f920 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
1f930 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
1f940 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1f950 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1f960 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1f970 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
1f980 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
1f990 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61   pC->pKeyInfo, a
1f9a0 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
1f9b0 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65  aTempRec), &pFre
1f9c0 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28  e.    );.    if(
1f9d0 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
1f9e0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
1f9f0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1fa00 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1fa10 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1fa20 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74  pIn3);.    sqlit
1fa30 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1fa40 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1fa50 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1fa60 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  z, pIdxKey);.   
1fa70 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3c 30   if( pOp->p4.i<0
1fa80 20 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65   ){.      pIdxKe
1fa90 79 2d 3e 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  y->nField = pOp-
1faa0 3e 70 34 2e 69 20 2a 20 2d 31 3b 0a 20 20 20 20  >p4.i * -1;.    
1fab0 7d 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  }.  }.  pIdxKey-
1fac0 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
1fad0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1fae0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
1faf0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
1fb00 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
1fb10 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
1fb20 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
1fb30 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
1fb40 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
1fb50 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
1fb60 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
1fb70 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
1fb80 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
1fb90 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
1fba0 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
1fbb0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
1fbc0 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
1fbd0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1fbe0 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  ){.        pc = 
1fbf0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62  pOp->p2 - 1; Vdb
1fc00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
1fc10 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
1fc20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1fc30 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
1fc40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1fc50 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1fc60 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1fc70 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
1fc80 4f 70 2d 3e 70 34 2e 69 3c 3d 30 20 29 7b 0a 20  Op->p4.i<=0 ){. 
1fc90 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1fca0 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d  (db, pFree);.  }
1fcb0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1fcc0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61  E_OK ){.    brea
1fcd0 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  k;.  }.  pC->see
1fce0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
1fcf0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1fd00 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
1fd10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
1fd20 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
1fd30 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1fd40 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1fd50 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1fd60 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
1fd70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
1fd80 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
1fd90 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
1fda0 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
1fdb0 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
1fdc0 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1fdd0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
1fde0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
1fdf0 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
1fe00 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
1fe10 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  f( !alreadyExist
1fe20 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1fe30 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1fe40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1fe50 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
1fe60 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1fe70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
1fe80 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ].**.** P1 is th
1fe90 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72  e index of a cur
1fea0 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53  sor open on an S
1feb0 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28  QL table btree (
1fec0 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20  with integer.** 
1fed0 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e  keys).  P3 is an
1fee0 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20   integer rowid. 
1fef0 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20   If P1 does not 
1ff00 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
1ff10 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50   with.** rowid P
1ff20 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
1ff30 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1ff40 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
1ff50 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77  in a record.** w
1ff60 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
1ff70 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  n leave the curs
1ff80 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
1ff90 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
1ffa0 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74  all.** through t
1ffb0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1ffc0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
1ffd0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
1ffe0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
1fff0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
20000 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
20010 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
20020 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
20030 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
20040 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
20050 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20060 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20070 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
20080 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
20090 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
200a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
200b0 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
200c0 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
200d0 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
200e0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
200f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20100 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
20110 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65  Conflict.*/.case
20120 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
20130 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
20140 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
20150 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
20160 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
20170 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
20180 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
20190 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
201a0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
201b0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
201c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
201d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
201e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
201f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20200 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20210 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
20220 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20230 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30    pC->seekOp = 0
20240 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
20250 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
20260 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20270 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
20280 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
20290 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
202a0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
202b0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
202c0 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
202d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
202e0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
202f0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
20300 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 70  y, 0, &res);.  p
20310 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
20320 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
20330 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
20340 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
20350 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
20360 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20370 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
20380 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20390 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
203a0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
203b0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
203c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
203d0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
203e0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
203f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20400 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
20410 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
20420 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
20430 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
20440 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
20450 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
20460 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
20470 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
20480 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
20490 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
204a0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
204b0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
204c0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
204d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
204e0 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
204f0 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
20500 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
20510 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
20520 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
20530 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
20540 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20550 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20560 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
20570 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
20580 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
20590 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
205a0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
205b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
205c0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
205d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
205e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
205f0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
20600 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
20610 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
20620 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
20630 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
20640 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
20650 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
20660 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
20670 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
20680 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
20690 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
206a0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
206b0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
206c0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
206d0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
206e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
206f0 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
20700 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
20710 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
20720 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
20730 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
20740 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
20750 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
20760 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
20770 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
20780 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
20790 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
207a0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
207b0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
207c0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
207d0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
207e0 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
207f0 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
20800 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
20810 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
20820 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
20830 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
20840 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
20850 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
20860 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
20870 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
20880 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
20890 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
208a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
208b0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
208c0 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
208d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
208e0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
208f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
20900 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
20910 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
20920 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
20930 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
20940 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
20950 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
20960 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
20970 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
20980 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
20990 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
209a0 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
209b0 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
209c0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
209d0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
209e0 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
209f0 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
20a00 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
20a10 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
20a20 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
20a30 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
20a40 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
20a50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20a60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20a70 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20a80 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20a90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20aa0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
20ab0 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
20ac0 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
20ad0 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
20ae0 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
20af0 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
20b00 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
20b10 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
20b20 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
20b30 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
20b40 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
20b50 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
20b60 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
20b70 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
20b80 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
20b90 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
20ba0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
20bb0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
20bc0 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
20bd0 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
20be0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
20bf0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
20c00 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
20c10 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
20c20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
20c30 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
20c40 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
20c50 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
20c60 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
20c70 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
20c80 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
20c90 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
20ca0 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
20cb0 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
20cc0 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
20cd0 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
20ce0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
20cf0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
20d00 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
20d10 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
20d20 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
20d30 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
20d40 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
20d50 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
20d60 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
20d70 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
20d80 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
20d90 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
20da0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
20db0 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
20dc0 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
20dd0 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
20de0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
20df0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
20e00 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
20e10 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
20e20 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
20e30 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
20e40 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
20e50 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
20e60 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
20e70 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
20e80 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
20e90 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
20ea0 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
20eb0 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
20ec0 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
20ed0 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
20ee0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
20ef0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
20f00 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
20f10 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
20f20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20f30 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
20f40 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
20f50 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
20f60 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
20f70 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20f80 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
20f90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20fa0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20fb0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
20fc0 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
20fd0 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
20fe0 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  4 */.      }else
20ff0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
21000 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
21010 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
21020 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
21030 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21040 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
21050 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
21060 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
21070 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
21080 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c    /* Cannot fail
21090 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65   following Btree
210a0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20  Last() */.      
210b0 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
210c0 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
210d0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
210e0 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
210f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
21100 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
21110 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
21120 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
21130 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65   }.    }..#ifnde
21140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
21150 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
21160 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
21170 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
21180 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
21190 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
211a0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
211b0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
211c0 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65     if( p->pFrame
211d0 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
211e0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
211f0 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
21200 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
21210 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
21220 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
21230 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
21240 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
21250 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21260 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
21270 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
21280 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
21290 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
212a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
212b0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
212c0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
212d0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
212e0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
212f0 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
21300 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
21310 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
21320 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21330 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
21340 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
21350 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
21360 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
21370 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
21380 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
21390 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
213a0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
213b0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
213c0 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
213d0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
213e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
213f0 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
21400 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
21410 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
21420 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
21430 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
21440 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
21450 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
21460 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
21470 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33  MP: R-12275-6133
21480 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  8 */.        got
21490 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
214a0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
214b0 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
214c0 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
214d0 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
214e0 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
214f0 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
21500 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
21510 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
21520 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
21530 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
21540 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
21550 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
21560 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
21570 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
21580 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
21590 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
215a0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
215b0 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
215c0 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
215d0 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
215e0 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
215f0 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
21600 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
21610 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
21620 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
21630 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
21640 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
21650 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
21660 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
21670 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
21680 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
21690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
216b0 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
216c0 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
216d0 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
216e0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
216f0 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
21700 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
21710 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
21720 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
21730 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
21740 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
21750 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
21760 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
21770 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21780 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21790 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
217a0 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217d0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
217e0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
217f0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
21800 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
21810 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b  && (++cnt<100));
21820 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
21830 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
21840 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
21850 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
21860 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
21870 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
21880 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21890 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
218a0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
218b0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
218c0 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
218d0 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
218e0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
218f0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
21900 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21910 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
21920 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
21930 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21940 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
21950 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
21960 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
21970 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
21980 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
21990 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
219a0 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
219b0 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
219c0 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
219d0 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
219e0 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
219f0 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
21a00 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
21a10 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
21a20 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
21a30 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
21a40 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
21a50 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
21a60 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
21a70 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
21a80 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
21a90 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
21aa0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21ab0 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
21ac0 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
21ad0 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
21ae0 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
21af0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
21b00 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
21b10 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
21b20 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
21b30 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
21b40 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
21b50 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
21b60 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
21b70 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
21b80 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
21b90 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
21ba0 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
21bb0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
21bc0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
21bd0 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
21be0 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
21bf0 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
21c00 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
21c10 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
21c20 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  s) was a success
21c30 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
21c40 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
21c50 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
21c60 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
21c70 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
21c80 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
21c90 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
21ca0 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
21cb0 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
21cc0 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
21cd0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
21ce0 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
21cf0 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
21d00 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68  ists opcode.** h
21d10 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74  as already posit
21d20 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
21d30 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69   correctly.  Thi
21d40 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
21d50 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f  tion.** that boo
21d60 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  sts performance 
21d70 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75  by avoiding redu
21d80 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ndant seeks..**.
21d90 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21da0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
21db0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
21dc0 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
21dd0 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
21de0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
21df0 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
21e00 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
21e10 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
21e20 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
21e30 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
21e40 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
21e50 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
21e60 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
21e70 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
21e80 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
21e90 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
21ea0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
21eb0 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
21ec0 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
21ed0 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
21ee0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
21ef0 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
21f00 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
21f10 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
21f20 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
21f30 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
21f40 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
21f50 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
21f60 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
21f70 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
21f80 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
21f90 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
21fa0 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
21fb0 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
21fc0 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
21fd0 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
21fe0 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
21ff0 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
22000 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
22010 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
22020 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
22030 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
22040 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
22050 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
22060 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
22070 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
22080 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
22090 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
220a0 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
220b0 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
220c0 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
220d0 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
220e0 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
220f0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
22100 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
22110 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
22120 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
22130 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
22140 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
22150 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
22160 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
22170 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
22180 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
22190 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
221a0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
221b0 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
221c0 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
221d0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
221e0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
221f0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
22200 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
22210 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
22220 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
22230 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
22240 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
22250 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
22260 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
22270 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
22280 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
22290 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
222a0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
222b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
222c0 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
222d0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
222e0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
222f0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
22300 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
22310 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
22320 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
22330 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
22340 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
22350 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
22360 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
22370 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
22380 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22390 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
223a0 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
223b0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
223c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
223d0 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61  Tbl; /* Table na
223e0 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
223f0 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   opdate hook */.
22400 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
22410 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
22420 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
22430 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
22440 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
22450 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65  ..  pData = &aMe
22460 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
22470 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22480 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22490 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
224a0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
224b0 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20  Data) );.  pC = 
224c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
224d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
224e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
224f0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22500 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22510 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
22520 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22530 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22540 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
22550 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
22560 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
22570 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
22580 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
22590 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
225a0 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
225b0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
225c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
225d0 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
225e0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
225f0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
22600 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70  y);.    iKey = p
22610 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
22620 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
22630 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
22640 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
22650 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  iKey = pOp->p3;.
22660 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
22670 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
22680 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
22690 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
226a0 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
226b0 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
226c0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
226d0 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70   = iKey;.  if( p
226e0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
226f0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
22700 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
22710 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
22720 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
22730 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
22740 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
22750 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65  Str) );.  }.  se
22760 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
22770 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
22780 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
22790 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
227a0 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
227b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
227c0 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  o ){.    nZero =
227d0 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
227e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a  .  }else{.    nZ
227f0 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  ero = 0;.  }.  r
22800 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22810 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
22820 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
22850 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
22860 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22870 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
22880 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
22890 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
228a0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
228b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
228c0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
228d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
228e0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
228f0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
22900 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
22910 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
22920 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
22930 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
22940 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
22950 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
22960 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
22970 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70     zTbl = pOp->p
22980 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28  4.z;.    op = ((
22990 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
229a0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
229b0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
229c0 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20  ITE_INSERT);.   
229d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
229e0 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e  able );.    db->
229f0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22a00 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22a10 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  op, zDb, zTbl, i
22a20 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
22a30 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
22a40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
22a60 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
22a70 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
22a80 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
22a90 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
22aa0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
22ab0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
22ac0 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
22ad0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
22ae0 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
22af0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
22b00 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
22b10 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
22b20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22b30 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
22b40 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
22b50 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
22b60 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
22b70 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
22b80 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
22b90 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
22ba0 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
22bb0 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
22bc0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22bd0 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
22be0 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
22bf0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
22c00 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
22c10 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
22c20 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
22c30 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
22c40 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
22c50 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
22c60 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
22c70 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
22c80 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
22c90 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
22ca0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
22cb0 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
22cc0 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
22cd0 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
22ce0 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
22cf0 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
22d00 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
22d10 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
22d20 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
22d30 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
22d40 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
22d50 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
22d60 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
22d70 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
22d80 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22d90 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
22da0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22db0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22dc0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
22dd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22de0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22df0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22e00 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20  >pCursor!=0 );  
22e10 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  /* Only valid fo
22e20 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e  r real tables, n
22e30 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a  o pseudotables *
22e40 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
22e50 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
22e60 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  0 );..#ifdef SQL
22e70 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54  ITE_DEBUG.  /* T
22e80 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
22e90 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
22ea0 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
22eb0 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20  or to OP_Delete 
22ec0 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61  will.  ** have a
22ed0 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
22ee0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
22ef0 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
22f00 6f 66 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  of the row that.
22f10 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65    ** is being de
22f20 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70  leted */.  if( p
22f30 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e  Op->p4.z && pC->
22f40 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69  isTable ){.    i
22f50 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20  64 iKey = 0;.   
22f60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
22f70 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
22f80 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  , &iKey);.    as
22f90 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
22fa0 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20  Target==iKey ); 
22fb0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20  .  }.#endif. .  
22fc0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22fd0 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
22fe0 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
22ff0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23000 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
23010 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
23020 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
23030 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
23040 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
23050 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
23060 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70  & pOp->p4.z && p
23070 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
23080 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
23090 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
230a0 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
230b0 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ETE,.           
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
230d0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
230e0 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ame, pOp->p4.z, 
230f0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
23100 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
23110 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
23120 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
23130 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
23140 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
23150 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
23160 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
23170 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
23180 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
23190 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
231a0 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
231b0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
231c0 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
231d0 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
231e0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
231f0 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
23200 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
23210 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
23220 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
23230 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
23240 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
23250 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
23260 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
23270 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
23280 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
23290 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
232a0 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
232b0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
232c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
232d0 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
232e0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
232f0 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29  sis:  if key(P1)
23300 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
23310 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
23320 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
23330 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
23340 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
23350 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
23360 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
23370 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
23380 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
23390 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
233a0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
233b0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
233c0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
233d0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
233e0 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
233f0 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
23400 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
23410 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
23420 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
23430 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
23440 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
23450 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
23460 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
23470 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
23480 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
23490 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
234a0 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
234b0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
234c0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
234d0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
234e0 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
234f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
23500 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
23510 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
23520 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
23530 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
23540 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
23550 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
23560 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
23570 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23580 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
23590 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
235a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
235b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
235c0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
235d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
235e0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
235f0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
23600 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
23610 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
23620 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
23630 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
23640 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
23650 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
23660 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
23670 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
23680 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
23690 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
236a0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
236b0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
236c0 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
236d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
236e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
236f0 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
23700 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
23710 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
23720 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
23730 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
23740 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
23750 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
23760 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
23770 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23780 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
23790 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
237a0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
237b0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
237c0 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
237d0 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
237e0 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
237f0 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
23800 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
23810 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
23820 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
23830 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
23840 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
23850 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
23860 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
23870 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
23880 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
23890 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
238a0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
238b0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
238c0 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
238d0 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
238e0 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
238f0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
23900 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
23910 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
23920 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
23930 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23940 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23950 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23960 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
23970 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
23980 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
23990 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
239a0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
239b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
239c0 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
239d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
239e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
239f0 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  r );.  p->apCsr[
23a00 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
23a10 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23a20 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
23a30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
23a40 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
23a50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23a60 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
23a70 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
23a80 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
23a90 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
23aa0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
23ab0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
23ac0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
23ad0 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
23ae0 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
23af0 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
23b00 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
23b10 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
23b20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
23b30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23b40 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
23b50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
23b60 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
23b70 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
23b80 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
23b90 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
23ba0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
23bb0 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
23bc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
23bd0 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20  r[P2]=key.**.** 
23be0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
23bf0 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
23c00 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
23c10 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
23c20 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
23c30 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
23c40 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
23c50 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
23c60 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
23c70 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
23c80 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
23c90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23ca0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
23cb0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
23cc0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
23cd0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
23ce0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
23cf0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
23d00 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
23d10 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
23d20 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
23d30 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
23d40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
23d50 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
23d60 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
23d70 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
23d80 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
23d90 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
23da0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
23db0 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
23dc0 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
23dd0 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
23de0 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
23df0 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
23e00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23e10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23e20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23e30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23e40 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
23e50 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73  r(pC)==0 );.  as
23e60 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23e70 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
23e80 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  !=OP_RowData );.
23e90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
23ea0 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d  Table==0 || pOp-
23eb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44  >opcode==OP_RowD
23ec0 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
23ed0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23ee0 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
23ef0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23f00 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
23f10 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
23f20 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
23f30 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
23f40 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f  C->pCursor;..  /
23f50 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
23f60 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
23f70 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
23f80 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
23f90 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
23fa0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
23fb0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
23fc0 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
23fd0 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
23fe0 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
23ff0 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77 68 65  or.  If this whe
24000 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
24010 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
24020 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
24030 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
24040 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
24050 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
24060 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
24070 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
24080 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
24090 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
240a0 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
240b0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
240c0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
240d0 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
240e0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
240f0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
24100 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
24110 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
24120 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
24130 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
24140 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
24150 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
24160 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
24170 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24180 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
24190 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
241a0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
241b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
241c0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70  .#endif..  if( p
241d0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
241e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
241f0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
24200 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
24210 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
24220 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
24230 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
24240 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
24250 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
24260 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
24270 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
24280 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
24290 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
242a0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
242b0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
242c0 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
242d0 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
242e0 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
242f0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
24300 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
24310 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
24320 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
24330 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
24340 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
24350 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
24360 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
24370 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
24380 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
24390 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
243a0 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73   }.  }.  testcas
243b0 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28  e( n==0 );.  if(
243c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
243d0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
243e0 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29  ut, MAX(n,32)) )
243f0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
24400 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e  m;.  }.  pOut->n
24410 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = n;.  MemSetTy
24420 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
24430 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43  _Blob);.  if( pC
24440 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
24450 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24460 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
24470 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
24480 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
24490 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
244a0 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
244b0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
244c0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
244d0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
244e0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
244f0 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
24500 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
24510 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
24520 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
24530 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
24540 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
24550 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
24560 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
24570 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
24580 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
24590 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
245a0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
245b0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
245c0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
245d0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
245e0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
245f0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
24600 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
24610 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
24620 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
24630 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
24640 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
24650 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
24660 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
24670 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
24680 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
24690 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
246a0 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
246b0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
246c0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
246d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
246e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
246f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24700 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
24710 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
24720 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
24730 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
24740 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24750 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24760 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24770 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24780 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24790 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
247a0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
247b0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
247c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
247d0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
247e0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
247f0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
24800 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
24810 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
24820 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
24830 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
24840 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
24850 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24860 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
24870 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
24880 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
24890 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
248a0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
248b0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
248c0 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
248d0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
248e0 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
248f0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
24900 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
24910 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
24920 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
24930 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
24940 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
24950 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24960 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
24970 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24980 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
24990 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
249a0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
249b0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
249c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
249d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
249e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
249f0 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
24a00 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
24a10 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
24a20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24a30 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
24a40 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
24a50 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
24a60 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
24a70 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
24a80 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f  e of CursorResto
24a90 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20  re() above */.  
24aa0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
24ab0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
24ac0 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
24ad0 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
24ae0 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
24af0 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
24b00 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
24b10 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
24b20 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
24b30 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
24b40 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
24b50 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
24b60 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
24b70 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
24b80 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24b90 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
24ba0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24bb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24bc0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24bd0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24be0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24bf0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
24c00 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
24c10 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24c20 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
24c30 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
24c40 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
24c50 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
24c60 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
24c70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24c80 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
24c90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
24ca0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
24cb0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
24cc0 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
24cd0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
24ce0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
24cf0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
24d00 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
24d10 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
24d20 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
24d30 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
24d40 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
24d50 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
24d60 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
24d70 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
24d80 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
24d90 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
24da0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
24db0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
24dc0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
24dd0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
24de0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
24df0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
24e00 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
24e10 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
24e20 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
24e30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
24e40 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
24e50 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
24e60 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
24e70 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
24e80 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
24e90 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
24ea0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
24eb0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
24ec0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
24ed0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24ee0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24ef0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24f00 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24f10 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24f20 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
24f30 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
24f40 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
24f50 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
24f60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24f70 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
24f80 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
24f90 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24fa0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24fb0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
24fc0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24fd0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
24fe0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
24ff0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
25000 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
25010 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
25020 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
25030 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
25040 20 20 69 66 28 20 72 65 73 20 29 20 70 63 20 3d    if( res ) pc =
25050 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25060 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
25070 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
25080 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
25090 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
250a0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
250b0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
250c0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
250d0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
250e0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
250f0 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
25100 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
25110 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
25120 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
25130 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
25140 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
25150 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
25160 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
25170 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
25180 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
25190 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
251a0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
251b0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
251c0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
251d0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
251e0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
251f0 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
25200 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
25210 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
25220 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
25230 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
25240 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
25250 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
25260 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
25270 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
25280 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
25290 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
252a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
252b0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
252c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
252d0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
252e0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
252f0 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
25300 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
25310 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
25320 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
25330 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
25340 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
25350 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
25360 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
25370 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
25380 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
25390 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
253a0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
253b0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
253c0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
253d0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
253e0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
253f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
25400 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
25410 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
25420 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
25430 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
25440 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
25450 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
25460 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
25470 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25480 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
25490 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
254a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
254b0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
254c0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
254d0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
254e0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
254f0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
25500 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
25510 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25520 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
25530 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
25540 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
25550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
25560 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
25570 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
25580 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25590 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
255a0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
255b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
255c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
255d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
255e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
255f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25600 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
25610 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
25620 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
25630 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
25640 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
25650 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
25660 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
25670 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
25680 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
25690 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
256a0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
256b0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
256c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
256d0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
256e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
256f0 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
25700 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
25710 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
25720 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
25730 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
25740 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25750 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
25760 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
25770 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
25780 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25790 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
257a0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
257b0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
257c0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
257d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
257e0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
257f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
25800 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
25810 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
25820 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
25830 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
25840 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
25850 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
25860 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
25870 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
25880 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
25890 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
258a0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
258b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
258c0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
258d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
258e0 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
258f0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
25900 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
25910 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
25920 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
25930 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
25940 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
25950 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
25960 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
25970 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
25980 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
25990 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
259a0 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
259b0 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
259c0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
259d0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
259e0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
259f0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
25a00 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
25a10 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
25a20 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
25a30 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
25a40 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
25a50 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
25a60 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
25a70 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
25a80 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
25a90 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
25aa0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
25ab0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
25ac0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
25ad0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
25ae0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
25af0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
25b00 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
25b10 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
25b20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
25b30 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
25b40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
25b50 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
25b60 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
25b70 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
25b80 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
25b90 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
25ba0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
25bb0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
25bc0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
25bd0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
25be0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
25bf0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
25c00 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
25c10 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
25c20 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
25c30 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
25c40 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
25c50 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
25c60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
25c70 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
25c80 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74  ke Next except t
25c90 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
25ca0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
25cb0 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
25cc0 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
25cd0 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
25ce0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
25cf0 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
25d00 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
25d10 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
25d20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
25d30 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
25d40 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
25d50 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
25d60 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
25d70 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
25d80 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
25d90 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
25da0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
25db0 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
25dc0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
25dd0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
25de0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
25df0 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
25e00 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
25e10 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
25e20 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
25e30 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
25e40 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
25e50 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
25e60 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
25e70 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
25e80 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
25e90 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
25ea0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
25eb0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
25ec0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
25ed0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
25ee0 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
25ef0 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
25f00 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
25f10 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
25f20 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
25f30 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
25f40 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
25f50 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
25f60 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
25f70 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
25f80 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
25f90 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
25fa0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
25fb0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
25fc0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
25fd0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
25fe0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
25ff0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
26000 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
26010 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
26020 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
26030 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
26040 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
26050 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
26060 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
26070 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
26080 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
26090 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
260a0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
260b0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
260c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
260d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
260e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
260f0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
26100 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
26110 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
26120 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63  st like Prev exc
26130 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
26140 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
26150 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
26160 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
26170 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
26180 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
26190 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
261a0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
261b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
261c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
261d0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
261e0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
261f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
26200 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
26210 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  &res);.  goto ne
26220 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
26230 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20  _PrevIfOpen:    
26240 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26250 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20  OP_NextIfOpen:  
26260 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
26270 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  f( p->apCsr[pOp-
26280 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  >p1]==0 ) break;
26290 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
262a0 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  gh */.case OP_Pr
262b0 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
262c0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
262d0 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f  Next:          /
262e0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
262f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26300 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26310 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
26320 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53  ( pOp->p5<ArrayS
26330 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
26340 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26350 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26360 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  res = pOp->p3;. 
26370 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26380 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26390 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
263a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
263b0 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20  C->pCursor );.  
263c0 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c  assert( res==0 |
263d0 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d  | (res==1 && pC-
263e0 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a  >isTable==0) );.
263f0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d    testcase( res=
26400 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
26410 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
26420 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
26430 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
26440 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
26450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26460 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
26470 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
26480 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
26490 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65  evious );.  asse
264a0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
264b0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c  =OP_NextIfOpen |
264c0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
264d0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
264e0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
264f0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
26500 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20  P_PrevIfOpen || 
26510 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
26520 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
26530 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54  evious);..  /* T
26540 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
26550 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
26560 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
26570 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20  , and Rewind..  
26580 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
26590 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
265a0 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
265b0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
265c0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
265d0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
265e0 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  t || pOp->opcode
265f0 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a  !=OP_NextIfOpen.
26600 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
26610 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ekOp==OP_SeekGT 
26620 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26630 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20  P_SeekGE.       
26640 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26650 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e  P_Rewind || pC->
26660 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64  seekOp==OP_Found
26670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26680 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
26690 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  v || pOp->opcode
266a0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a  !=OP_PrevIfOpen.
266b0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
266c0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ekOp==OP_SeekLT 
266d0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
266e0 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20  P_SeekLE.       
266f0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26700 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20  P_Last );..  rc 
26710 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  = pOp->p4.xAdvan
26720 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ce(pC->pCursor, 
26730 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  &res);.next_tail
26740 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
26750 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26760 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
26770 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a  aken(res==0,2);.
26780 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
26790 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
267a0 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  = 0;.    pc = pO
267b0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70  p->p2 - 1;.    p
267c0 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
267d0 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
267e0 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
267f0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
26800 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  nt++;.#endif.  }
26810 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  else{.    pC->nu
26820 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20  llRow = 1;.  }. 
26830 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
26840 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
26850 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
26860 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
26870 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
26880 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
26890 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
268a0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
268b0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
268c0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
268d0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
268e0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
268f0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
26900 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
26910 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
26920 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
26930 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
26940 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
26950 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
26960 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
26970 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
26980 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
26990 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
269a0 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
269b0 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
269c0 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
269d0 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
269e0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
269f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
26a00 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
26a10 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
26a20 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
26a30 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
26a40 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
26a50 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
26a60 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
26a70 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c  KRESULT bit set,
26a80 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
26a90 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75   must have.** ju
26aa0 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74  st done a seek t
26ab0 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65  o the spot where
26ac0 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69   the new entry i
26ad0 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
26ae0 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61  ..** This flag a
26af0 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65  voids doing an e
26b00 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a  xtra seek..**.**
26b10 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
26b20 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
26b30 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
26b40 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
26b50 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
26b60 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
26b70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
26b80 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
26b90 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
26ba0 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
26bb0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
26bc0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26bd0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
26be0 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79  Crsr;.  int nKey
26bf0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
26c00 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28  zKey;..  assert(
26c10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26c20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26c30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26c40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26c50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26c60 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26c70 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
26c90 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49  rInsert) );.  pI
26ca0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
26cb0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
26cc0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
26cd0 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
26ce0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
26cf0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
26d00 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
26d10 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
26d20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
26d30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26d40 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
26d50 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
26d60 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
26d70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
26d80 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65  .    if( isSorte
26d90 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72  r(pC) ){.      r
26da0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
26db0 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
26dc0 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  In2);.    }else{
26dd0 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49  .      nKey = pI
26de0 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65  n2->n;.      zKe
26df0 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
26e00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
26e10 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72  treeInsert(pCrsr
26e20 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
26e30 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c  , 0, 0, pOp->p3,
26e40 20 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f   .          ((pO
26e50 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
26e60 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
26e70 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
26e80 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b   0).          );
26e90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
26ea0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
26eb0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43  o==0 );.      pC
26ec0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26ed0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
26ee0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
26ef0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
26f00 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
26f10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26f20 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
26f30 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
26f40 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
26f50 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
26f60 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
26f70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
26f80 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
26f90 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
26fa0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
26fb0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
26fc0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
26fd0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
26fe0 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
26ff0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
27000 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
27010 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
27020 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
27030 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
27040 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27050 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
27060 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
27070 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
27080 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
27090 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
270a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
270b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
270c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
270d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
270e0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
270f0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
27100 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
27110 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
27120 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
27130 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
27140 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
27150 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
27160 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
27170 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
27180 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64  m[pOp->p2];.#ifd
27190 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
271a0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
271b0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
271c0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
271d0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
271e0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
271f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27200 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
27210 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
27220 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
27230 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
27240 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
27250 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27260 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
27270 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
27280 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
27290 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
272a0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
272b0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
272c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
272d0 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
272e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
272f0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
27300 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
27310 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
27320 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
27330 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
27340 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
27350 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
27360 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
27370 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
27380 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
27390 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
273a0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
273b0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
273c0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
273d0 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
273e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
273f0 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
27400 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
27410 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
27420 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27430 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
27440 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
27450 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27460 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
27470 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27480 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27490 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
274a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
274b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
274c0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
274d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
274e0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
274f0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
27500 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27510 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
27520 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
27530 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
27540 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20  Moveto==0 );..  
27550 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
27560 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
27570 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
27580 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
27590 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
275a0 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
275b0 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
275c0 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
275d0 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  nd for an IdxRow
275e0 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20  id.  ** opcode, 
275f0 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28  hence the NEVER(
27600 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68  ) arround the ch
27610 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72  eck of the retur
27620 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  n value..  */.  
27630 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27640 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
27650 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
27660 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
27670 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27680 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
27690 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
276a0 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
276b0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
276c0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
276d0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
276e0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
276f0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
27700 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69  db, pCrsr, &rowi
27710 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
27720 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27730 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
27740 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
27750 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
27760 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75  = rowid;.    pOu
27770 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
27780 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  nt;.  }.  break;
27790 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
277a0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
277b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
277c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
277d0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
277e0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
277f0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
27800 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
27810 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
27820 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
27830 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
27840 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
27850 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
27860 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
27870 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
27880 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
27890 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
278a0 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
278b0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
278c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
278d0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
278e0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
278f0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
27900 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
27910 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
27920 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
27930 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
27940 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
27950 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
27960 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
27970 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
27980 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
27990 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
279a0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
279b0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
279c0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
279d0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
279e0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
279f0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
27a00 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
27a10 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
27a20 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
27a30 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27a40 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27a50 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27a60 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
27a70 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
27a80 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
27a90 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
27aa0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
27ab0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
27ac0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
27ad0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
27ae0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27af0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
27b00 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
27b10 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
27b20 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27b30 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
27b40 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
27b50 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
27b60 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
27b70 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
27b80 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
27b90 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27ba0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
27bb0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
27bc0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
27bd0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
27be0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27bf0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27c00 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27c10 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
27c20 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
27c30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27c40 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
27c50 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
27c60 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
27c70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
27c80 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
27c90 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27ca0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
27cb0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
27cc0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
27cd0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27ce0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
27cf0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
27d00 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
27d10 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
27d20 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
27d30 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
27d40 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27d50 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
27d60 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
27d70 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
27d80 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
27d90 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27da0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27db0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27dc0 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
27dd0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
27de0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27df0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
27e00 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
27e10 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
27e20 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
27e30 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
27e40 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
27e50 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
27e60 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
27e70 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
27e80 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
27e90 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
27ea0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
27eb0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
27ec0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
27ed0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
27ee0 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
27ef0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
27f00 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
27f10 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
27f20 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
27f30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
27f40 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
27f50 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27f60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27f70 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27f80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27f90 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
27fa0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
27fb0 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
27fc0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
27fd0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
27fe0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
27ff0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
28000 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28010 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
28020 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
28030 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
28040 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
28050 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
28060 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
28070 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
28080 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28090 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
280a0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
280b0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
280c0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
280d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
280e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
280f0 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28100 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28110 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
28120 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
28130 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
28140 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
28150 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
28160 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
28170 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
28180 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
28190 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
281a0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
281b0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
281c0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
281d0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
281e0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
281f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
28200 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
28210 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
28220 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
28230 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
28240 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
28250 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
28260 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
28270 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
28280 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
28290 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
282a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
282b0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
282c0 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
282d0 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
282e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
282f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
28300 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
28310 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28320 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
28330 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
28340 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
28350 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a  .  if( res>0 ){.
28360 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
28370 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1 ;.  }.  bre
28380 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28390 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
283a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
283b0 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
283c0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
283d0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
283e0 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
283f0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
28400 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
28410 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
28420 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
28430 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
28440 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
28450 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
28460 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
28470 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
28480 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
28490 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
284a0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
284b0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
284c0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
284d0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
284e0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
284f0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
28500 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
28510 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
28520 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
28530 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
28540 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
28550 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
28560 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
28570 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
28580 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
28590 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
285a0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
285b0 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
285c0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
285d0 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
285e0 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
285f0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
28600 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
28610 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
28620 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
28630 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
28640 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
28650 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
28660 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
28670 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
28680 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
28690 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
286a0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
286b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
286c0 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
286d0 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
286e0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
286f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
28700 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
28710 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
28720 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
28730 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
28740 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
28750 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
28760 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
28770 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  e;.  int iDb;.. 
28780 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
28790 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64  Only==0 );.#ifnd
287a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
287b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43  IRTUALTABLE.  iC
287c0 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56  nt = 0;.  for(pV
287d0 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70  dbe=db->pVdbe; p
287e0 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56  Vdbe; pVdbe = pV
287f0 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  dbe->pNext){.   
28800 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69   if( pVdbe->magi
28810 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
28820 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52  N && pVdbe->bIsR
28830 65 61 64 65 72 20 0a 20 20 20 20 20 26 26 20 70  eader .     && p
28840 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
28850 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
28860 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20  c>=0 .    ){.   
28870 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d     iCnt++;.    }
28880 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e  .  }.#else.  iCn
28890 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61  t = db->nVdbeRea
288a0 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74  d;.#endif.  pOut
288b0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
288c0 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  ll;.  if( iCnt>1
288d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
288e0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
288f0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
28900 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
28910 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
28920 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
28930 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
28940 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
28950 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
28960 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
28970 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
28980 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
28990 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
289a0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
289b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
289c0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
289d0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
289e0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
289f0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28a00 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
28a10 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
28a20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28a30 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
28a40 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
28a50 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
28a60 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
28a70 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
28a80 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
28a90 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
28aa0 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
28ab0 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
28ac0 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
28ad0 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
28ae0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
28af0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
28b00 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
28b10 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
28b20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
28b30 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
28b40 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
28b50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28b60 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
28b70 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
28b80 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
28b90 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
28ba0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28bb0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
28bc0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
28bd0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
28be0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
28bf0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
28c00 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
28c10 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
28c20 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
28c30 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
28c40 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
28c50 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
28c60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28c70 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
28c80 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
28c90 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
28ca0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
28cb0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28cc0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
28cd0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
28ce0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
28cf0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
28d00 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
28d10 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
28d20 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
28d30 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
28d40 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
28d50 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
28d60 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
28d70 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
28d80 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
28d90 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
28da0 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
28db0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
28dc0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
28dd0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
28de0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
28df0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
28e00 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
28e10 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
28e20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
28e30 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
28e40 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
28e50 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
28e60 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
28e70 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
28e80 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
28e90 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
28ea0 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
28eb0 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
28ec0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
28ed0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
28ee0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
28ef0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
28f00 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
28f10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
28f20 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
28f30 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
28f40 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
28f50 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
28f60 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
28f70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
28f80 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
28f90 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
28fa0 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
28fb0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
28fc0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
28fd0 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
28fe0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
28ff0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
29000 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
29010 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
29020 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
29030 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
29040 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
29050 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
29060 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
29070 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
29080 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
29090 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
290a0 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
290b0 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
290c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
290d0 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
290e0 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
290f0 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
29100 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
29110 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
29120 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
29130 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
29140 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
29150 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
29160 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29170 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29180 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
29190 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
291a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
291b0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pC!=0 );.  if( p
291c0 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20  C->pSorter ){.  
291d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
291e0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
291f0 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c  >pSorter);.  }el
29200 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
29210 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  pC->isEphemeral 
29220 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
29230 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
29240 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70  leOfCursor(pC->p
29250 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
29260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29270 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
29280 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
29290 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
292a0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
292b0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
292c0 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
292d0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
292e0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
292f0 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
29300 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
29310 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
29320 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
29330 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
29340 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
29350 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
29360 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
29370 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
29380 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
29390 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
293a0 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
293b0 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
293c0 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
293d0 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
293e0 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
293f0 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
29400 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
29410 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
29420 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
29430 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
29440 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
29450 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
29460 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
29470 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29480 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
29490 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
294a0 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
294b0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
294c0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
294d0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
294e0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
294f0 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
29500 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
29510 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
29520 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
29530 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
29540 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
29550 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
29560 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
29570 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
29580 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
29590 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
295a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
295b0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
295c0 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
295d0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
295e0 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
295f0 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
29600 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
29610 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
29620 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
29630 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
29640 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
29650 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
29660 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
29670 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
29680 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
29690 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
296a0 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
296b0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
296c0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
296d0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
296e0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
296f0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
29700 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
29710 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
29720 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
29730 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
29740 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
29750 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
29760 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
29770 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
29780 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29790 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
297a0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
297b0 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
297c0 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
297d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
297e0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
297f0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
29800 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
29810 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
29820 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
29830 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
29840 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
29850 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
29860 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
29870 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
29880 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
29890 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
298a0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
298b0 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
298c0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
298d0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
298e0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
298f0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
29900 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
29910 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
29920 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
29930 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
29940 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
29950 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
29960 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
29970 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
29980 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
29990 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
299a0 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
299b0 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
299c0 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
299d0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
299e0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
299f0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
29a00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
29a10 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
29a20 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
29a30 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
29a40 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
29a50 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
29a60 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
29a70 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
29a80 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
29a90 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
29aa0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
29ab0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
29ac0 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
29ad0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
29ae0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
29af0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
29b00 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
29b10 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
29b20 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
29b30 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
29b40 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
29b50 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
29b60 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
29b70 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
29b80 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
29b90 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
29ba0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
29bb0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
29bc0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
29bd0 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
29be0 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
29bf0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
29c00 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
29c10 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
29c20 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
29c30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
29c40 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
29c50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
29c60 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
29c70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
29c80 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
29c90 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
29ca0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
29cb0 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
29cc0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
29cd0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29ce0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
29cf0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29d00 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
29d10 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
29d20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
29d30 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
29d40 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
29d50 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
29d60 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
29d70 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
29d80 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
29d90 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
29da0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
29db0 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
29dc0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
29dd0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
29de0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
29df0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
29e00 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
29e10 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
29e20 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
29e30 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
29e40 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
29e50 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
29e60 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
29e70 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
29e80 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
29e90 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
29ea0 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
29eb0 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
29ec0 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
29ed0 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
29ee0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
29ef0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
29f00 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
29f10 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
29f20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29f30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29f40 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
29f50 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
29f60 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
29f70 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
29f80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
29f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29fa0 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
29fb0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
29fc0 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
29fd0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
29fe0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
29ff0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2a000 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2a010 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2a020 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2a030 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2a040 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2a050 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2a060 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2a070 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2a080 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2a090 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2a0a0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2a0b0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2a0c0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2a0d0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2a0e0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2a0f0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2a100 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2a110 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2a120 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2a130 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2a140 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a150 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2a160 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2a170 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2a180 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2a190 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2a1a0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2a1b0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2a1c0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2a1d0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2a1e0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2a1f0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2a200 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2a210 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2a220 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2a230 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2a240 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a250 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a260 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a270 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a280 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a290 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2a2a0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a2b0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2a2c0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a2d0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2a2e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2a2f0 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2a300 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2a310 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2a320 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2a330 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2a340 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2a350 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2a360 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2a370 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2a380 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2a390 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2a3a0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2a3b0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2a3c0 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2a3d0 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2a3e0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a3f0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a400 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a410 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a420 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a430 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2a440 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2a450 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2a460 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2a470 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2a480 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2a490 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2a4a0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2a4b0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2a4c0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
2a4d0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2a4e0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2a4f0 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2a500 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2a510 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2a520 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2a530 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2a540 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2a550 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2a560 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2a570 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2a580 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2a590 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2a5a0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2a5b0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2a5c0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2a5d0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2a5e0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2a5f0 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2a600 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2a610 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2a620 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2a630 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2a640 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2a650 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2a660 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2a670 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2a680 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2a690 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2a6a0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2a6b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a6c0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
2a6d0 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
2a6e0 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
2a6f0 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
2a700 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
2a710 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
2a720 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
2a730 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
2a740 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
2a750 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2a760 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
2a770 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2a780 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
2a790 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
2a7a0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
2a7b0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2a7c0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
2a7d0 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
2a7e0 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
2a7f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2a800 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
2a810 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
2a820 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
2a830 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
2a840 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
2a850 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
2a860 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
2a870 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
2a880 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
2a890 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2a8a0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2a8b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2a8c0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2a8d0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2a8e0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2a8f0 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2a900 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2a910 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2a920 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2a930 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2a940 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2a950 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2a960 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2a970 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
2a980 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
2a990 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2a9a0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
2a9b0 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
2a9c0 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
2a9d0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2a9e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a9f0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2aa00 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2aa10 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
2aa20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2aa30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2aa40 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
2aa50 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
2aa60 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2aa70 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2aa80 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
2aa90 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2aaa0 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
2aab0 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
2aac0 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
2aad0 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
2aae0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
2aaf0 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
2ab00 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
2ab10 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2ab20 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2ab30 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2ab40 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2ab50 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2ab60 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2ab70 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2ab80 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
2ab90 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abb0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2abc0 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
2abd0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
2abe0 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
2abf0 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
2ac00 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
2ac10 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2ac20 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
2ac30 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2ac40 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
2ac50 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
2ac60 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2ac70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2ac80 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2ac90 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
2aca0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2acb0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
2acc0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2acd0 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
2ace0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2acf0 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
2ad00 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2ad10 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2ad20 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2ad30 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
2ad40 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
2ad50 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2ad60 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
2ad70 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2ad80 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2ad90 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2ada0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2adb0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2adc0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2add0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2ade0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2adf0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2ae00 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2ae10 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2ae20 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2ae30 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2ae40 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2ae50 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2ae60 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2ae70 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2ae80 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2ae90 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2aea0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2aeb0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2aec0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2aed0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2aee0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2aef0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2af00 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2af10 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2af20 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2af30 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2af40 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2af50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2af60 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2af70 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2af80 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
2af90 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
2afa0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
2afb0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
2afc0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2afd0 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
2afe0 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
2aff0 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
2b000 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2b010 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
2b020 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
2b030 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
2b040 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2b050 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
2b060 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
2b070 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b080 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
2b090 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
2b0a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b0b0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2b0c0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b0d0 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
2b0e0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
2b0f0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b100 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
2b110 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
2b120 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
2b130 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2b140 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
2b150 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
2b160 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64  ->p2 - 1;.    Vd
2b170 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2b180 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2);.  }else{.   
2b190 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2b1a0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2b1b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c  index */.    sql
2b1c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2b1d0 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
2b1e0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64  3], val);.    Vd
2b1f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
2b200 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  2);.  }.  goto c
2b210 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2b220 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2b230 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2b240 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2b250 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2b260 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2b270 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2b280 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2b290 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2b2a0 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2b2b0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2b2c0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2b2d0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2b2e0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2b2f0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2b300 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2b310 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2b320 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2b330 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2b340 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2b350 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2b360 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2b370 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2b380 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2b390 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2b3a0 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2b3b0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2b3c0 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2b3d0 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2b3e0 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2b3f0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2b400 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2b410 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2b420 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2b430 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2b440 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2b450 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2b460 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2b470 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2b480 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2b490 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2b4a0 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2b4b0 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2b4c0 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2b4d0 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2b4e0 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2b4f0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2b500 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2b510 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2b520 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2b530 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2b540 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2b550 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2b560 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2b570 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2b580 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2b590 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2b5a0 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2b5b0 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2b5c0 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2b5d0 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2b5e0 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2b5f0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2b600 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2b610 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2b620 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2b630 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2b640 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2b650 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2b660 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2b670 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2b680 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2b690 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2b6a0 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2b6b0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2b6c0 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2b6f0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2b700 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2b710 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b720 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2b730 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2b740 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2b750 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2b760 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2b770 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2b780 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2b790 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2b7a0 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2b7b0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2b7c0 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2b7d0 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2b7e0 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2b7f0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2b800 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2b810 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2b820 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2b830 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2b840 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2b850 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2b860 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2b870 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2b880 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2b890 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2b8a0 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2b8b0 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2b8c0 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2b8d0 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2b8e0 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2b8f0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2b900 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2b910 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2b920 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2b930 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2b940 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20   exists ){.     
2b950 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2b960 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
2b970 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2b980 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
2b990 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2b9a0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
2b9b0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2b9c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b9d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b9e0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
2b9f0 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
2ba00 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2ba10 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2ba20 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2ba30 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
2ba40 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
2ba50 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
2ba60 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2ba70 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
2ba80 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
2ba90 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
2baa0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
2bab0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
2bac0 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
2bad0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
2bae0 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
2baf0 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
2bb00 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2bb10 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
2bb20 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
2bb30 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
2bb40 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
2bb50 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
2bb60 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
2bb70 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2bb80 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
2bb90 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
2bba0 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
2bbb0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
2bbc0 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
2bbd0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
2bbe0 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
2bbf0 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
2bc00 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2bc10 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
2bc20 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
2bc30 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
2bc40 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
2bc50 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
2bc60 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
2bc70 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
2bc80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
2bc90 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
2bca0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2bcb0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
2bcc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2bcd0 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
2bce0 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
2bcf0 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
2bd00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2bd10 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
2bd20 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
2bd30 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
2bd40 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bd60 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
2bd70 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
2bd80 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
2bd90 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2bda0 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
2bdb0 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
2bdc0 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
2bdd0 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
2bde0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
2bdf0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
2be00 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
2be10 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
2be20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
2be30 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
2be40 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
2be50 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
2be60 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
2be70 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
2be80 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
2be90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
2bea0 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
2beb0 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
2bec0 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
2bed0 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
2bee0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2bef0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
2bf00 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
2bf10 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
2bf20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
2bf30 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
2bf40 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2bf50 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
2bf60 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
2bf70 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
2bf80 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
2bf90 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
2bfa0 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
2bfb0 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
2bfc0 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
2bfd0 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
2bfe0 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
2bff0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
2c000 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
2c010 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
2c020 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
2c030 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
2c040 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2c050 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
2c060 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
2c070 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
2c080 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
2c090 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
2c0a0 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
2c0b0 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
2c0c0 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
2c0d0 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
2c0e0 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
2c0f0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
2c100 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
2c110 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
2c120 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
2c130 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
2c140 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
2c150 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
2c160 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
2c170 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
2c180 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
2c190 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
2c1a0 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
2c1b0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
2c1c0 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
2c1d0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2c1e0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2c1f0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
2c200 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
2c210 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2c220 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
2c230 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
2c240 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
2c250 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
2c260 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
2c270 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
2c280 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2c290 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
2c2a0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2c2b0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2c2c0 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
2c2d0 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
2c2e0 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
2c2f0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
2c300 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
2c310 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
2c320 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2c330 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
2c340 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
2c350 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
2c360 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
2c370 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
2c380 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
2c390 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
2c3a0 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
2c3b0 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
2c3c0 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
2c3d0 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
2c3e0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2c3f0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
2c400 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
2c410 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
2c420 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
2c430 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
2c440 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
2c450 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
2c460 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
2c470 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
2c480 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
2c490 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
2c4a0 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
2c4b0 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
2c4c0 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
2c4d0 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
2c4e0 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
2c4f0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
2c500 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
2c510 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
2c520 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
2c530 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
2c540 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
2c550 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
2c560 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
2c570 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
2c580 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
2c590 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
2c5a0 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
2c5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2c5c0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
2c5d0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
2c5e0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
2c5f0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
2c600 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20  Cursor *).      
2c610 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2c620 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65  am->nOnce * size
2c630 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61  of(u8);.    pFra
2c640 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
2c650 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
2c660 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
2c670 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
2c680 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
2c690 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2c6a0 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
2c6b0 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
2c6c0 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
2c6d0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
2c6e0 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
2c6f0 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
2c700 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2c710 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
2c720 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2c730 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
2c740 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
2c750 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61  c = pc;.    pFra
2c760 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
2c770 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2c780 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
2c790 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
2c7a0 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
2c7b0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
2c7c0 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
2c7d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
2c7e0 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
2c7f0 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
2c800 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2c810 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
2c820 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72  ->token;.    pFr
2c830 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d  ame->aOnceFlag =
2c840 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20   p->aOnceFlag;. 
2c850 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65     pFrame->nOnce
2c860 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46  Flag = p->nOnceF
2c870 6c 61 67 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  lag;.#ifdef SQLI
2c880 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2c890 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
2c8a0 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
2c8b0 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
2c8c0 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
2c8d0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2c8e0 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
2c8f0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
2c900 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
2c910 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
2c920 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
2c930 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
2c940 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
2c950 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2c960 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2c970 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2c980 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2c990 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2c9a0 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2c9b0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2c9c0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2c9d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2c9e0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2c9f0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2ca00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2ca10 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  c==pFrame->pc );
2ca20 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
2ca30 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
2ca40 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
2ca50 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
2ca60 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
2ca70 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
2ca80 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
2ca90 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
2caa0 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
2cab0 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e  ->nChange;.  p->
2cac0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
2cad0 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
2cae0 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
2caf0 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65  Mem = &VdbeFrame
2cb00 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b  Mem(pFrame)[-1];
2cb10 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
2cb20 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
2cb30 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
2cb40 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
2cb50 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
2cb60 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
2cb70 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
2cb80 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20  +1];.  p->aOp = 
2cb90 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
2cba0 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
2cbb0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20  pProgram->nOp;. 
2cbc0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20   p->aOnceFlag = 
2cbd0 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b  (u8 *)&p->apCsr[
2cbe0 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70  p->nCursor];.  p
2cbf0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50  ->nOnceFlag = pP
2cc00 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23  rogram->nOnce;.#
2cc10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2cc20 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2cc30 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20  TUS.  p->anExec 
2cc40 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 63  = 0;.#endif.  pc
2cc50 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28   = -1;.  memset(
2cc60 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c  p->aOnceFlag, 0,
2cc70 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a   p->nOnceFlag);.
2cc80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2cc90 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
2cca0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2ccb0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
2ccc0 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
2ccd0 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
2cce0 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
2ccf0 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
2cd00 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
2cd10 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
2cd20 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
2cd30 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
2cd40 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
2cd50 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
2cd60 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
2cd70 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
2cd80 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
2cd90 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
2cda0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2cdb0 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
2cdc0 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
2cdd0 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
2cde0 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
2cdf0 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
2ce00 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
2ce10 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
2ce20 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
2ce30 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2ce40 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
2ce50 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2ce60 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
2ce70 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
2ce80 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
2ce90 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
2cea0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2ceb0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2cec0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2ced0 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
2cee0 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  pIn;.  pFrame = 
2cef0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2cf00 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2cf10 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2cf20 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2cf30 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2cf40 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2cf50 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2cf60 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2cf70 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2cf80 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2cf90 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2cfa0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2cfb0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2cfc0 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2cfd0 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2cfe0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2cff0 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
2d000 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
2d010 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
2d020 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
2d030 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
2d040 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
2d050 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2d060 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
2d070 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
2d080 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2d090 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
2d0a0 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
2d0b0 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
2d0c0 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
2d0d0 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
2d0e0 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
2d0f0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
2d100 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2d110 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d120 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2d130 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
2d140 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
2d150 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
2d160 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2d170 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
2d180 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
2d190 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2d1a0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2d1b0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2d1c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
2d1d0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
2d1e0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
2d1f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d200 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
2d210 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2d220 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
2d230 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2d240 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2d250 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2d260 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2d270 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2d280 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2d290 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2d2a0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2d2b0 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2d2c0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2d2d0 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2d2e0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2d2f0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d300 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2d310 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2d320 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2d330 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2d340 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2d350 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2d360 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2d370 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2d380 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2d390 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2d3a0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2d3b0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2d3c0 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2d3d0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2d3e0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2d3f0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2d400 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2d410 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2d420 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2d430 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  1 ){.    VdbeBra
2d440 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65  nchTaken(db->nDe
2d450 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2d460 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2d470 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2d480 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
2d490 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2d4a0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2d4b0 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  ns==0 ) pc = pOp
2d4c0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
2d4d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2d4e0 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74  aken(p->nFkConst
2d4f0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2d500 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2d510 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
2d520 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2d530 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2d540 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
2d550 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2d560 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2d570 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2d580 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2d590 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23  OREIGN_KEY */..#
2d5a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d5b0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2d5c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d  ./* Opcode: MemM
2d5d0 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ax P1 P2 * * *.*
2d5e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
2d5f0 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32  ]=max(r[P1],r[P2
2d600 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ]).**.** P1 is a
2d610 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
2d620 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
2d630 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74  his VM (the root
2d640 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66   frame is.** dif
2d650 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
2d660 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66  current frame if
2d670 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2d680 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75  n is being execu
2d690 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ted.** within a 
2d6a0 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65  sub-program). Se
2d6b0 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  t the value of r
2d6c0 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
2d6d0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a  e maximum of .**
2d6e0 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c   its current val
2d6f0 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ue and the value
2d700 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2d710 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
2d720 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61  ruction throws a
2d730 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d  n error if the m
2d740 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f  emory cell is no
2d750 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61  t initially.** a
2d760 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2d770 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20  se OP_MemMax: { 
2d780 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2d790 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2d7a0 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
2d7b0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
2d7c0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2d7d0 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
2d7e0 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
2d7f0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
2d800 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
2d810 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
2d820 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
2d830 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2d840 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
2d850 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
2d860 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
2d870 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
2d880 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
2d890 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2d8a0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2d8b0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
2d8c0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2d8d0 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
2d8e0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
2d8f0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
2d900 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d910 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
2d920 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
2d930 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
2d940 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
2d950 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2d960 50 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]>0 goto P2.**
2d970 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2d980 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2d990 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
2d9a0 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2d9b0 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
2d9c0 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
2d9d0 20 50 32 20 61 6e 64 0a 2a 2a 20 61 64 64 20 74   P2 and.** add t
2d9e0 68 65 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  he literal value
2d9f0 20 50 33 20 74 6f 20 72 65 67 69 73 74 65 72 20   P3 to register 
2da00 50 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P1..**.** If the
2da10 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
2da20 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2da30 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68   less than 1, th
2da40 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
2da50 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  is unchanged and
2da60 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20   control passes 
2da70 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2da80 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2da90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
2daa0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
2dab0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2dac0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2dad0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2dae0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2daf0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2db00 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
2db10 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
2db20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
2db30 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2db40 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2db50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2db60 20 49 66 4e 65 67 20 50 31 20 50 32 20 50 33 20   IfNeg P1 P2 P3 
2db70 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2db80 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72   r[P1]+=P3, if r
2db90 5b 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]<0 goto P2.*
2dba0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
2dbb0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
2dbc0 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c   integer.  Add l
2dbd0 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65  iteral P3 to the
2dbe0 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
2dbf0 69 73 74 65 72 20 50 31 20 74 68 65 6e 20 69 66  ister P1 then if
2dc00 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2dc10 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2dc20 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
2dc30 70 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73  p to P2. .*/.cas
2dc40 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
2dc50 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2dc60 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2dc70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2dc80 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2dc90 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2dca0 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2dcb0 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61  p->p3;.  VdbeBra
2dcc0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2dcd0 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
2dce0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
2dcf0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2dd00 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2dd10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2dd20 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
2dd30 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2dd40 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
2dd50 20 74 68 65 6e 20 72 5b 50 31 5d 2b 3d 50 33 2c   then r[P1]+=P3,
2dd60 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2dd70 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2dd80 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2dd90 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
2dda0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
2ddb0 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
2ddc0 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e  ly nonzero, then
2ddd0 20 61 64 64 20 50 33 20 74 6f 20 50 31 20 61 6e   add P3 to P1 an
2dde0 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  d jump to P2.  I
2ddf0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2de00 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65  .** initially ze
2de10 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
2de20 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
2de30 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
2de40 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
2de50 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2de60 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2de70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2de80 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2de90 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2dea0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2deb0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
2dec0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2ded0 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e  >u.i ){.     pIn
2dee0 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2def0 33 3b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  3;.     pc = pOp
2df00 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2df10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2df20 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
2df30 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2df40 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
2df50 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
2df60 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2df70 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
2df80 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
2df90 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
2dfa0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  in register P1.*
2dfb0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2dfc0 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
2dfd0 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
2dfe0 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
2dff0 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
2e000 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2e010 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2e020 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2e030 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2e040 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2e050 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
2e060 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2e070 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2e080 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2e090 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  ==0 ){.     pc =
2e0a0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2e0b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
2e0c0 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65  * Opcode: JumpZe
2e0d0 72 6f 49 6e 63 72 20 50 31 20 50 32 20 2a 20 2a  roIncr P1 P2 * *
2e0e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e0f0 69 66 20 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20  if (r[P1]++)==0 
2e100 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ) goto P2.**.** 
2e110 54 68 65 20 72 65 67 69 73 74 65 72 20 50 31 20  The register P1 
2e120 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2e130 69 6e 74 65 67 65 72 2e 20 20 49 66 20 72 65 67  integer.  If reg
2e140 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
2e150 69 61 6c 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74  ially.** zero, t
2e160 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2e170 20 49 6e 63 72 65 6d 65 6e 74 20 72 65 67 69 73   Increment regis
2e180 74 65 72 20 50 31 20 72 65 67 61 72 64 6c 65 73  ter P1 regardles
2e190 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 0a  s of whether or.
2e1a0 2a 2a 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  ** not the jump 
2e1b0 69 73 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73  is taken..*/.cas
2e1c0 65 20 4f 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63  e OP_JumpZeroInc
2e1d0 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  r: {        /* j
2e1e0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2e1f0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e200 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e210 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2e220 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2e230 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2e240 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
2e250 28 70 49 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30  (pIn1->u.i++)==0
2e260 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2e270 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2e280 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e290 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
2e2a0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2e2b0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
2e2c0 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
2e2d0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
2e2e0 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
2e2f0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
2e300 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
2e310 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
2e320 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
2e330 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2e340 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
2e350 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
2e360 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
2e370 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65  on.  Use registe
2e380 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61  r.** P3 as the a
2e390 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
2e3a0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
2e3b0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
2e3c0 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
2e3d0 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
2e3e0 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ors..*/.case OP_
2e3f0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
2e400 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d   n;.  int i;.  M
2e410 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
2e420 2a 70 52 65 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a  *pRec;.  Mem t;.
2e430 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2e440 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2e450 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2e460 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2e470 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2e480 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2e490 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2e4a0 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2e4b0 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2e4c0 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2e4d0 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2e4e0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2e4f0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2e500 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2e510 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2e520 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2e530 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a  e(p, pRec);.  }.
2e540 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
2e550 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
2e560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2e570 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2e580 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2e590 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  ) );.  ctx.pMem 
2e5a0 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2e5b0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2e5c0 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56  >n++;.  sqlite3V
2e5d0 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64  dbeMemInit(&t, d
2e5e0 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  b, MEM_Null);.  
2e5f0 63 74 78 2e 70 4f 75 74 20 3d 20 26 74 3b 0a 20  ctx.pOut = &t;. 
2e600 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
2e610 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20  ;.  ctx.pVdbe = 
2e620 70 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70  p;.  ctx.iOp = p
2e630 63 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61  c;.  ctx.skipFla
2e640 67 20 3d 20 30 3b 0a 20 20 28 63 74 78 2e 70 46  g = 0;.  (ctx.pF
2e650 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
2e660 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20  , n, apVal); /* 
2e670 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
2e680 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  30 */.  if( ctx.
2e690 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73  isError ){.    s
2e6a0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2e6b0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2e6c0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2e6d0 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
2e6e0 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
2e6f0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rror;.  }.  if( 
2e700 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  ctx.skipFlag ){.
2e710 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2e720 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
2e730 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20  ollSeq );.    i 
2e740 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
2e750 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65    if( i ) sqlite
2e760 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2e770 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20  (&aMem[i], 1);. 
2e780 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
2e790 4d 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a  MemRelease(&t);.
2e7a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e7b0 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20  pcode: AggFinal 
2e7c0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
2e7d0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
2e7e0 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a  r[P1] N=P2.**.**
2e7f0 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
2e800 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
2e810 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2e820 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20  .  P1 is.** the 
2e830 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
2e840 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
2e850 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20  mulator for the 
2e860 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a  aggregate..**.**
2e870 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
2e880 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
2e890 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
2e8a0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
2e8b0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2e8c0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2e8d0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
2e8e0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
2e8f0 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
2e900 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
2e910 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
2e920 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
2e930 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
2e940 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
2e950 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
2e960 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
2e970 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
2e980 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
2e990 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e  ed for the degen
2e9a0 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65  erate case where
2e9b0 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
2e9c0 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
2e9d0 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
2e9e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  .*/.case OP_AggF
2e9f0 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
2ea00 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
2ea10 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
2ea20 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p1<=(p->nMem-p-
2ea30 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
2ea40 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2ea50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2ea60 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
2ea70 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
2ea80 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
2ea90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
2eaa0 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
2eab0 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
2eac0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2ead0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2eae0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2eaf0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
2eb00 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
2eb10 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
2eb20 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2eb30 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
2eb40 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
2eb50 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
2eb60 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
2eb70 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
2eb80 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2eb90 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
2eba0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2ebb0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
2ebc0 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
2ebd0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
2ebe0 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
2ebf0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
2ec00 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
2ec10 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
2ec20 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
2ec30 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
2ec40 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
2ec50 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2ec60 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20  SSIVE, FULL,.** 
2ec70 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e  RESTART, or TRUN
2ec80 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f  CATE.  Write 1 o
2ec90 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2eca0 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2ecb0 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2ecc0 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2ecd0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ece0 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2ecf0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2ed00 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2ed10 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2ed20 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2ed30 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2ed40 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2ed50 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2ed60 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2ed70 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2ed80 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2ed90 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2eda0 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2edb0 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2edc0 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2edd0 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2ede0 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2edf0 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2ee00 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2ee30 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2ee40 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2ee50 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2ee60 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2ee70 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2ee80 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2ee90 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2eea0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2eeb0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2eec0 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2eed0 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2eee0 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2eef0 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2ef00 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2ef10 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2ef20 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2ef30 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2ef40 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2ef50 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2ef60 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20  INT_RESTART.    
2ef70 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2ef80 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2ef90 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20  _TRUNCATE.  );. 
2efa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
2efb0 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
2efc0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
2efd0 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
2efe0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2eff0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
2f000 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2f010 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b      aRes[0] = 1;
2f020 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20  .  }.  for(i=0, 
2f030 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2f040 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c  ->p3]; i<3; i++,
2f050 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71   pMem++){.    sq
2f060 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2f070 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29  nt64(pMem, (i64)
2f080 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20  aRes[i]);.  }   
2f090 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a   .  break;.};  .
2f0a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2f0b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2f0c0 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f  MA./* Opcode: Jo
2f0d0 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20  urnalMode P1 P2 
2f0e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61  P3 * *.**.** Cha
2f0f0 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  nge the journal 
2f100 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65  mode of database
2f110 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75   P1 to P3. P3 mu
2f120 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  st be one of the
2f130 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  .** PAGER_JOURNA
2f140 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73  LMODE_XXX values
2f150 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65  . If changing be
2f160 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75  tween the variou
2f170 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f  s rollback.** mo
2f180 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75  des (delete, tru
2f190 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20  ncate, persist, 
2f1a0 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c  off and memory),
2f1b0 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c   this is a simpl
2f1c0 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20  e.** operation. 
2f1d0 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65  No IO is require
2f1e0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e  d..**.** If chan
2f1f0 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74  ging into or out
2f200 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65   of WAL mode the
2f210 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f   procedure is mo
2f220 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a  re complicated..
2f230 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74  **.** Write a st
2f240 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
2f250 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61  the final journa
2f260 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74  l-mode to regist
2f270 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2f280 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b  P_JournalMode: {
2f290 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2f2a0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  elease */.  Btre
2f2b0 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2f2d0 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
2f2e0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
2f2f0 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
2f300 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
2f310 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
2f320 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
2f330 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
2f360 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
2f370 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
2f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f390 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
2f3a0 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
2f3b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2f3c0 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
2f3d0 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
2f3e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
2f3f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
2f400 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
2f410 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  f..  eNew = pOp-
2f420 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
2f430 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f440 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
2f450 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2f460 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f470 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
2f480 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2f490 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2f4a0 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
2f4b0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2f4c0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
2f4d0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2f4e0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2f4f0 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
2f500 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f510 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
2f520 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2f530 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
2f540 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
2f550 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2f560 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2f570 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2f580 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
2f590 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
2f5a0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
2f5b0 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
2f5c0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
2f5d0 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
2f5e0 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
2f5f0 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
2f600 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2f610 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
2f620 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
2f630 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
2f640 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
2f650 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2f660 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
2f670 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f680 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
2f690 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
2f6a0 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
2f6b0 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
2f6c0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
2f6d0 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
2f6e0 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
2f6f0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
2f700 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
2f710 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
2f720 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
2f730 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
2f740 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
2f750 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f760 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
2f770 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
2f780 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
2f790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
2f7a0 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
2f7b0 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
2f7c0 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
2f7d0 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
2f7e0 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
2f7f0 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
2f800 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2f810 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
2f820 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
2f830 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2f840 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
2f850 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f860 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
2f870 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
2f880 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
2f890 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
2f8a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2f8b0 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
2f8c0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2f8d0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
2f8e0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2f8f0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2f900 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2f910 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2f920 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
2f930 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f940 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
2f950 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
2f960 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
2f970 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
2f980 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
2f990 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f9a0 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
2f9b0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
2f9c0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
2f9d0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
2f9e0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
2f9f0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
2fa00 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
2fa10 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
2fa20 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
2fa30 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
2fa40 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
2fa50 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
2fa60 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
2fa70 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
2fa80 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
2fa90 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
2faa0 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
2fab0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2fac0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
2fad0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
2fae0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
2faf0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2fb00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
2fb10 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2fb20 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2fb30 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
2fb40 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2fb50 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2fb60 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
2fb70 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
2fb80 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
2fb90 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
2fba0 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
2fbb0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
2fbc0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
2fbd0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
2fbe0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2fbf0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2fc00 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2fc10 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
2fc20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
2fc30 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
2fc40 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
2fc50 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
2fc60 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
2fc70 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
2fc80 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
2fc90 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
2fca0 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
2fcb0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
2fcc0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
2fcd0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
2fce0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
2fcf0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2fd00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2fd10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2fd20 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
2fd30 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
2fd40 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2fd50 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
2fd60 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
2fd70 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
2fd80 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
2fd90 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2fda0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2fdb0 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
2fdc0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2fdd0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2fde0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  ew);..  pOut = &
2fdf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2fe00 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2fe10 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
2fe20 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
2fe30 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
2fe40 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2fe50 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
2fe60 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
2fe70 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
2fe80 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
2fe90 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
2fea0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2feb0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
2fec0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2fed0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
2fee0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
2fef0 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
2ff00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ff10 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
2ff20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ff30 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
2ff40 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
2ff50 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
2ff60 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
2ff70 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
2ff80 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
2ff90 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
2ffa0 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
2ffb0 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
2ffc0 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
2ffd0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2ffe0 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
2fff0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
30000 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65  Vacuum: {.  asse
30010 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
30020 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
30030 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70  ite3RunVacuum(&p
30040 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a  ->zErrMsg, db);.
30050 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30060 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
30070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
30080 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
30090 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
300a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
300b0 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
300c0 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
300d0 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
300e0 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
300f0 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
30100 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
30110 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
30120 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
30130 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
30140 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
30150 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
30160 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
30170 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
30180 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
30190 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
301a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
301b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
301c0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
301d0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
301e0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
301f0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
30200 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
30210 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
30220 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
30230 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
30240 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
30250 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62  cuum(pBt);.  Vdb
30260 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
30270 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b  =SQLITE_DONE,2);
30280 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
30290 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63  E_DONE ){.    pc
302a0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
302b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
302c0 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OK;.  }.  break;
302d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
302e0 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20  code: Expire P1 
302f0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61  * * * *.**.** Ca
30300 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  use precompiled 
30310 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78  statements to ex
30320 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65  pire.  When an e
30330 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
30340 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20  .** is executed 
30350 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74  using sqlite3_st
30360 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74  ep() it will eit
30370 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  her automaticall
30380 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69  y.** reprepare i
30390 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73  tself (if it was
303a0 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61   originally crea
303b0 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
303c0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a  3_prepare_v2()).
303d0 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61  ** or it will fa
303e0 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53  il with SQLITE_S
303f0 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  CHEMA..** .** If
30400 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
30410 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
30420 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
30430 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
30440 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
30450 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
30460 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
30470 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a  ent is expired..
30480 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
30490 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
304a0 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
304b0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
304c0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
304d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
304e0 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
304f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
30500 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30510 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
30520 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
30530 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
30540 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44  .** Synopsis: iD
30550 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69  b=P1 root=P2 wri
30560 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61  te=P3.**.** Obta
30570 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
30580 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
30590 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
305a0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
305b0 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
305c0 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
305d0 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
305e0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
305f0 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
30600 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
30610 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
30620 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
30630 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
30640 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
30650 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
30660 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
30670 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
30680 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
30690 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
306a0 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
306b0 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
306c0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
306d0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
306e0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
306f0 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
30700 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
30710 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
30720 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
30730 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
30740 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
30750 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
30760 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
30770 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
30780 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
30790 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
307a0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
307b0 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
307c0 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
307d0 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
307e0 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
307f0 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
30800 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
30810 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
30820 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
30830 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
30840 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
30850 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
30860 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
30870 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
30880 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
30890 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
308a0 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
308b0 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
308c0 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
308d0 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
308e0 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
308f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
30900 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
30910 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
30920 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
30930 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
30940 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30950 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
30960 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
30970 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30980 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30990 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
309a0 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
309b0 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
309c0 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
309d0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
309e0 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
309f0 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
30a00 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
30a10 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
30a20 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
30a30 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
30a40 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
30a50 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
30a60 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
30a70 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
30a80 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
30a90 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
30aa0 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
30ab0 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
30ac0 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
30ad0 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
30ae0 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
30af0 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
30b00 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
30b10 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
30b20 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
30b30 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
30b40 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33   pVTab ) sqlite3
30b50 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
30b60 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
30b70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
30b80 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
30b90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30ba0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
30bb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30bc0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
30bd0 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a   VCreate P1 P2 *
30be0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73   * *.**.** P2 is
30bf0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
30c00 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20   holds the name 
30c10 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
30c20 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a  le in database .
30c30 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  ** P1. Call the 
30c40 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66  xCreate method f
30c50 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
30c60 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
30c70 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e: {.  Mem sMem;
30c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
30c90 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
30ca0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
30cb0 64 20 2a 2f 0a 20 20 6d 65 6d 73 65 74 28 26 73  d */.  memset(&s
30cc0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
30cd0 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62  Mem));.  sMem.db
30ce0 20 3d 20 64 62 3b 0a 20 20 72 63 20 3d 20 73 71   = db;.  rc = sq
30cf0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
30d00 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  (&sMem, &aMem[pO
30d10 70 2d 3e 70 32 5d 29 3b 0a 20 20 69 66 28 20 72  p->p2]);.  if( r
30d20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
30d30 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
30d40 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  zTab = (const ch
30d50 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
30d60 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20  e_text(&sMem);. 
30d70 20 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20     assert( zTab 
30d80 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
30d90 6c 65 64 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  led );.    if( z
30da0 54 61 62 20 29 7b 0a 20 20 20 20 20 20 72 63 20  Tab ){.      rc 
30db0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
30dc0 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
30dd0 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a  >p1, zTab, &p->z
30de0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20  ErrMsg);.    }. 
30df0 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
30e00 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
30e10 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
30e20 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
30e30 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30e40 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
30e50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30e60 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
30e70 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
30e80 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
30e90 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
30ea0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
30eb0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
30ec0 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
30ed0 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
30ee0 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
30ef0 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
30f00 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
30f10 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
30f20 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
30f30 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
30f40 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
30f50 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30f60 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
30f70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
30f80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30f90 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
30fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30fb0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
30fc0 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
30fd0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
30fe0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
30ff0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
31000 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
31010 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
31020 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
31030 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
31040 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
31050 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
31060 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
31070 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
31080 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
31090 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
310a0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
310b0 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
310c0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
310d0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
310e0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
310f0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
31100 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
31110 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
31120 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
31130 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
31140 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
31150 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
31160 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
31170 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
31180 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
31190 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
311a0 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
311b0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
311c0 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
311d0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
311e0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
311f0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
31200 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
31210 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
31220 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
31230 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
31240 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
31250 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
31260 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
31270 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
31280 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
31290 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
312a0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
312b0 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
312c0 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
312d0 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
312e0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
312f0 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
31300 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
31310 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
31320 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
31330 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
31340 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
31350 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31360 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31370 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31380 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31390 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
313a0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
313b0 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
313c0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
313d0 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
313e0 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
313f0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
31400 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
31410 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
31420 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
31430 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
31440 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
31450 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
31460 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
31470 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
31480 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
31490 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
314a0 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
314b0 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
314c0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
314d0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
314e0 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
314f0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
31500 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
31510 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
31520 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
31530 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
31540 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
31550 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
31560 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
31570 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
31580 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
31590 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
315a0 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
315b0 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
315c0 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
315d0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
315e0 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
315f0 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
31600 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
31610 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
31620 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
31630 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
31640 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
31650 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
31660 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
31670 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
31680 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
31690 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
316a0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
316b0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
316c0 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
316d0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
316e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
316f0 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
31700 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
31710 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
31720 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31730 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
31740 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
31750 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
31760 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
31770 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
31780 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
31790 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
317a0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
317b0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
317c0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
317d0 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
317e0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
317f0 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
31800 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
31810 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
31820 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
31830 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
31840 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
31850 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
31860 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
31870 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
31880 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
31890 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
318a0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
318b0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
318c0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
318d0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
318e0 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
318f0 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
31900 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
31910 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
31920 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
31930 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
31940 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
31950 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
31960 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
31970 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
31980 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
31990 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
319a0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
319b0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
319c0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
319d0 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
319e0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
319f0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
31a00 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
31a10 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
31a20 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
31a30 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
31a40 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
31a50 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
31a60 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
31a70 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
31a80 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
31a90 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
31aa0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
31ab0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
31ac0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
31ad0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
31ae0 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
31af0 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56  or);.    }.    V
31b00 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
31b10 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
31b20 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
31b30 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
31b40 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
31b50 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
31b60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31b70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31b80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31b90 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31ba0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31bb0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
31bc0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
31bd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31be0 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
31bf0 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
31c00 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
31c10 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
31c20 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
31c30 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
31c40 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
31c50 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
31c60 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
31c70 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
31c80 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
31c90 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
31ca0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
31cb0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
31cc0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
31cd0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
31ce0 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
31cf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
31d00 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
31d10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
31d20 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
31d30 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
31d40 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
31d50 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
31d60 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
31d70 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
31d80 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
31d90 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
31da0 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
31db0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
31dc0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
31dd0 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
31de0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
31df0 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
31e00 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
31e10 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
31e20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
31e30 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
31e40 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
31e50 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
31e60 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
31e70 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65  text));.  sConte
31e80 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b  xt.pOut = pDest;
31e90 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
31ea0 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
31eb0 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  l);.  rc = pModu
31ec0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72  le->xColumn(pCur
31ed0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
31ee0 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
31ef0 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
31f00 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
31f10 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
31f20 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
31f30 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
31f40 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
31f50 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
31f60 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44  hangeEncoding(pD
31f70 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  est, encoding);.
31f80 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
31f90 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
31fa0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
31fb0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
31fc0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
31fd0 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
31fe0 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
31ff0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
32000 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32020 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32030 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32040 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32050 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
32060 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
32070 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
32080 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
32090 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
320a0 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
320b0 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
320c0 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
320d0 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
320e0 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
320f0 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
32100 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
32110 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
32120 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
32130 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
32140 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
32150 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
32160 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
32170 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
32180 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
32190 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
321a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
321b0 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
321c0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
321d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
321e0 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
321f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
32200 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
32210 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
32220 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
32230 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
32240 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
32250 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
32260 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
32270 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
32280 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
32290 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
322a0 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
322b0 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
322c0 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
322d0 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
322e0 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
322f0 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
32300 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
32310 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
32320 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
32330 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
32340 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
32350 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
32360 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
32370 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
32380 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
32390 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
323a0 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
323b0 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
323c0 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
323d0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
323e0 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69  sor..  */.  p->i
323f0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
32400 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
32410 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74  >xNext(pCur->pVt
32420 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e  abCursor);.  p->
32430 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
32440 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
32450 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
32460 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
32470 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
32480 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
32490 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61  >xEof(pCur->pVta
324a0 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  bCursor);.  }.  
324b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
324c0 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21  !res,2);.  if( !
324d0 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
324e0 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
324f0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
32500 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
32510 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
32520 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
32530 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
32540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32550 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
32560 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32570 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
32580 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
32590 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
325a0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
325b0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
325c0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
325d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
325e0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
325f0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
32600 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
32610 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
32620 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
32630 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
32640 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
32650 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
32660 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
32670 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
32680 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
32690 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
326a0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
326b0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
326c0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
326d0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
326e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
326f0 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
32700 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
32710 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
32720 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
32730 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
32740 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
32750 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32760 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
32770 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
32780 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
32790 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
327a0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
327b0 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
327c0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
327d0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
327e0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
327f0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
32800 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
32810 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
32820 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
32830 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
32840 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
32850 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
32860 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
32870 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
32880 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20   pName->z);.    
32890 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
328a0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
328b0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
328c0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
328d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
328e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
328f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32900 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
32910 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
32920 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
32930 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
32940 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
32950 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
32960 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
32970 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
32980 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
32990 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
329a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
329b0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
329c0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
329d0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
329e0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
329f0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
32a00 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
32a10 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
32a20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
32a30 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
32a40 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
32a50 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
32a60 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
32a70 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
32a80 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
32a90 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
32aa0 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
32ab0 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
32ac0 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
32ad0 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
32ae0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
32af0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
32b00 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
32b10 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
32b20 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
32b30 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
32b40 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
32b50 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
32b60 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
32b70 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
32b80 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
32b90 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
32ba0 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
32bb0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
32bc0 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
32bd0 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
32be0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
32bf0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
32c00 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
32c10 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
32c20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
32c30 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
32c40 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
32c50 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
32c60 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
32c70 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
32c80 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
32c90 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
32ca0 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
32cb0 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
32cc0 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
32cd0 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
32ce0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
32cf0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
32d00 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
32d10 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
32d20 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
32d30 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
32d40 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
32d50 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
32d60 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
32d70 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
32d80 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
32d90 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
32da0 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
32db0 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
32dc0 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
32dd0 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
32de0 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
32df0 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
32e00 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
32e10 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
32e20 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
32e30 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  ;.  int nArg;.  
32e40 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
32e50 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d  int64 rowid;.  M
32e60 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65  em **apArg;.  Me
32e70 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74  m *pX;..  assert
32e80 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20  ( pOp->p2==1    
32e90 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
32ea0 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70  OE_Fail   || pOp
32eb0 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  ->p5==OE_Rollbac
32ec0 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  k .       || pOp
32ed0 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c  ->p5==OE_Abort |
32ee0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  | pOp->p5==OE_Ig
32ef0 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  nore || pOp->p5=
32f00 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b  =OE_Replace.  );
32f10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
32f20 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
32f30 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
32f40 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
32f50 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
32f60 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
32f70 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
32f80 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
32f90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
32fa0 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
32fb0 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
32fc0 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
32fd0 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
32fe0 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
32ff0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
33000 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
33010 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
33020 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
33030 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
33040 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
33050 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
33060 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
33070 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
33080 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72   pX);.      apAr
33090 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
330a0 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
330b0 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
330c0 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  ict = pOp->p5;. 
330d0 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
330e0 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
330f0 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
33100 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74  wid);.    db->vt
33110 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76  abOnConflict = v
33120 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
33130 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
33140 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
33150 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
33160 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
33170 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20  Op->p1 ){.      
33180 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
33190 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
331a0 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
331b0 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
331c0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
331d0 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  = lastRowid = ro
331e0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  wid;.    }.    i
331f0 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
33200 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
33210 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62  && pOp->p4.pVtab
33220 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b  ->bConstraint ){
33230 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
33240 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p5==OE_Ignore ){
33250 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
33260 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
33270 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
33280 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
33290 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70  (pOp->p5==OE_Rep
332a0 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74  lace) ? OE_Abort
332b0 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20   : pOp->p5);.   
332c0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
332d0 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65        p->nChange
332e0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ++;.    }.  }.  
332f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
33300 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
33310 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
33320 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
33330 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
33340 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  AS./* Opcode: Pa
33350 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  gecount P1 P2 * 
33360 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
33370 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62  the current numb
33380 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64  er of pages in d
33390 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65  atabase P1 to me
333a0 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f  mory cell P2..*/
333b0 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75  .case OP_Pagecou
333c0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
333d0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
333e0 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
333f0 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
33400 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44  eLastPage(db->aD
33410 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b  b[pOp->p1].pBt);
33420 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
33430 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51  if...#ifndef  SQ
33440 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
33450 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64  PRAGMAS./* Opcod
33460 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50  e: MaxPgcnt P1 P
33470 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
33480 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61  ry to set the ma
33490 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
334a0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
334b0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
334c0 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c   P3..** Do not l
334d0 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
334e0 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62  age count fall b
334f0 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  elow the current
33500 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a   page count and.
33510 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ** do not change
33520 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
33530 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66  e count value if
33540 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74   P3==0..**.** St
33550 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ore the maximum 
33560 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72  page count after
33570 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72   the change in r
33580 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
33590 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a  ase OP_MaxPgcnt:
335a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
335b0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
335c0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
335d0 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72  nt newMax;.  Btr
335e0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20  ee *pBt;..  pBt 
335f0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
33600 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
33610 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
33620 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
33630 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
33640 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
33650 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
33660 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
33670 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
33680 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
33690 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
336a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
336b0 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
336c0 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
336d0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
336e0 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50  Opcode: Init * P
336f0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
33700 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20  psis:  Start at 
33710 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
33720 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
33730 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
33740 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
33750 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
33760 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
33770 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
33780 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
33790 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
337a0 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
337b0 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
337c0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
337d0 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
337e0 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
337f0 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
33800 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
33810 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
33820 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
33830 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
33840 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
33850 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
33860 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
33870 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
33880 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
33890 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
338a0 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 4f 70  r *z;..  if( pOp
338b0 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63 20 3d  ->p2 ){.    pc =
338c0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
338d0 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
338e0 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66  _OMIT_TRACE.  if
338f0 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20  ( db->xTrace.   
33900 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75  && !p->doingReru
33910 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20  n.   && (zTrace 
33920 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
33930 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
33940 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ql))!=0.  ){.   
33950 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   z = sqlite3Vdbe
33960 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72  ExpandSql(p, zTr
33970 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54  ace);.    db->xT
33980 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41  race(db->pTraceA
33990 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69  rg, z);.    sqli
339a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29  te3DbFree(db, z)
339b0 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  ;.  }.#ifdef SQL
339c0 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52  ITE_USE_FCNTL_TR
339d0 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28  ACE.  zTrace = (
339e0 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
339f0 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
33a00 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29  ;.  if( zTrace )
33a10 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
33a20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
33a30 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
33a40 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28   if( DbMaskTest(
33a50 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29  p->btreeMask, i)
33a60 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
33a70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
33a80 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64  le_control(db, d
33a90 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
33aa0 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52   SQLITE_FCNTL_TR
33ab0 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  ACE, zTrace);.  
33ac0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
33ad0 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  * SQLITE_USE_FCN
33ae0 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64  TL_TRACE */.#ifd
33af0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33b00 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
33b10 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
33b20 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54  ce)!=0.   && (zT
33b30 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
33b40 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
33b50 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
33b60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 62  {.    sqlite3Deb
33b70 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
33b80 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
33b90 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  ce);.  }.#endif 
33ba0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
33bb0 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
33bc0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a  ITE_OMIT_TRACE *
33bd0 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  /.  break;.}.../
33be0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
33bf0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
33c00 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
33c10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
33c20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
33c30 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
33c40 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
33c50 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
33c60 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
33c70 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
33c80 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
33c90 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
33ca0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
33cb0 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
33cc0 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
33cd0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
33ce0 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
33cf0 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
33d00 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
33d10 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
33d20 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
33d30 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
33d40 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
33d50 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
33d60 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
33d70 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
33d80 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
33d90 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
33da0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
33db0 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
33dc0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
33dd0 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
33de0 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
33df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33e30 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
33e40 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
33e50 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
33e60 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
33e70 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
33e80 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
33e90 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
33ea0 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
33eb0 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
33ec0 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
33ed0 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
33ee0 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
33ef0 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
33f00 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
33f10 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
33f20 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
33f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33f70 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
33f80 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
33f90 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64   {.      u64 end
33fa0 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77  Time = sqlite3Hw
33fb0 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66  time();.      if
33fc0 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20  ( endTime>start 
33fd0 29 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d  ) pOp->cycles +=
33fe0 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72 74   endTime - start
33ff0 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74  ;.      pOp->cnt
34000 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
34010 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  ..    /* The fol
34020 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73  lowing code adds
34030 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20   nothing to the 
34040 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61  actual functiona
34050 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74  lity.    ** of t
34060 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20  he program.  It 
34070 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72  is only here for
34080 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62   testing and deb
34090 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f  ugging..    ** O
340a0 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
340b0 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43  , it does burn C
340c0 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20  PU cycles every 
340d0 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20  time through.   
340e0 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f   ** the evaluato
340f0 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63  r loop.  So we c
34100 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20  an leave it out 
34110 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64  when NDEBUG is d
34120 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
34130 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
34140 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31    assert( pc>=-1
34150 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
34160 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
34170 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
34180 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
34190 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
341a0 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
341b0 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22  printf("rc=%d\n"
341c0 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ,rc);.      if( 
341d0 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28  pOp->opflags & (
341e0 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
341f0 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32  LEASE|OPFLG_OUT2
34200 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  ) ){.        reg
34210 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
34220 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
34230 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
34240 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
34250 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
34260 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
34270 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70  sterTrace(pOp->p
34280 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
34290 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
342a0 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c  }.#endif  /* SQL
342b0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
342c0 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a  dif  /* NDEBUG *
342d0 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e  /.  }  /* The en
342e0 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29  d of the for(;;)
342f0 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20   loop the loops 
34300 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20  through opcodes 
34310 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72  */..  /* If we r
34320 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
34330 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65   it means that e
34340 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69  xecution is fini
34350 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61  shed with.  ** a
34360 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20  n error of some 
34370 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f  kind..  */.vdbe_
34380 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73  error_halt:.  as
34390 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d  sert( rc );.  p-
343a0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74  >rc = rc;.  test
343b0 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
343c0 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
343d0 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c  0 );.  sqlite3_l
343e0 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e  og(rc, "statemen
343f0 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20  t aborts at %d: 
34400 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20  [%s] %s", .     
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63                pc
34420 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
34430 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65  rrMsg);.  sqlite
34440 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
34450 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49  if( rc==SQLITE_I
34460 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d  OERR_NOMEM ) db-
34470 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
34480 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
34490 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65  _ERROR;.  if( re
344a0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
344b0 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
344c0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
344d0 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f  db, resetSchemaO
344e0 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a  nFault-1);.  }..
344f0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
34500 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66   only way out of
34510 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
34520 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a    We have to.  *
34530 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75  * release the mu
34540 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20  texes on btrees 
34550 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72  that were acquir
34560 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74  ed at the.  ** t
34570 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75  op. */.vdbe_retu
34580 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f  rn:.  db->lastRo
34590 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
345a0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d  .  testcase( nVm
345b0 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61  Step>0 );.  p->a
345c0 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
345d0 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
345e0 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74  P] += (int)nVmSt
345f0 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ep;.  sqlite3Vdb
34600 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74  eLeave(p);.  ret
34610 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
34620 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
34630 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
34640 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
34650 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
34660 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
34670 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
34680 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
34690 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
346a0 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
346b0 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
346c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
346d0 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
346e0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
346f0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
34700 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
34710 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
34720 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
34730 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
34740 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
34750 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
34760 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
34770 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
34780 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
34790 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
347a0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
347b0 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69  for any other ki
347c0 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f  nd of fatal erro
347d0 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72  r.  The "rc" var
347e0 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c  iable.  ** shoul
347f0 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  d hold the error
34800 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62   number..  */.ab
34810 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34820 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  :.  assert( p->z
34830 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69  ErrMsg==0 );.  i
34840 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
34850 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  led ) rc = SQLIT
34860 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72  E_NOMEM;.  if( r
34870 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c!=SQLITE_IOERR_
34880 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c  NOMEM ){.    sql
34890 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
348a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
348b0 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
348c0 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67  tr(rc));.  }.  g
348d0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
348e0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
348f0 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73  to here if the s
34900 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
34910 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20  () API sets the 
34920 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66  interrupt.  ** f
34930 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  lag..  */.abort_
34940 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
34950 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  :.  assert( db->
34960 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
34970 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   );.  rc = SQLIT
34980 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  E_INTERRUPT;.  p
34990 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
349a0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
349b0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
349c0 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53  %s", sqlite3ErrS
349d0 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20  tr(rc));.  goto 
349e0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
349f0 0a 7d 0a                                         .}.