/ Hex Artifact Content
Login

Artifact ff9efff0548b6a31d095ddc999d606e7605f0cdc:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
40e0: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
40f0: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4100: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4110: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4120: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
4130: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
4140: 2e 0a 2a 2f 20 0a 73 74 61 74 69 63 20 4d 65 6d  ..*/ .static Mem
4150: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4160: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4170: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4180: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4190: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
41a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
41b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
41c0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
41d0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
41e0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
41f0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
4200: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
4210: 61 6d 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c  amic(pOut) ) sql
4220: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
4230: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74  ll(pOut);.  pOut
4240: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
4250: 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74  t;.  return pOut
4260: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
4270: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4280: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4290: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
42a0: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
42b0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
42c0: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
42d0: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
42e0: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
42f0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4300: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
4310: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
4320: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4330: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
4340: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
4350: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4360: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4370: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4380: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4390: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
43a0: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
43b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
43c0: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
43d0: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
43e0: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
43f0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4400: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4410: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4420: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4430: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
4440: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
4450: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
4460: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
4470: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
4480: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
4490: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
44a0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
44b0: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
44c0: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
44d0: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
44e0: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
44f0: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4500: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4510: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4520: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4530: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
4540: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
4550: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
4560: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4570: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4580: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4590: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
45a0: 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20  t = 0;/* Invoke 
45b0: 78 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e  xProgress() when
45c0: 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73   nVmStep reaches
45d0: 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a   this */.#endif.
45e0: 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d    Mem *aMem = p-
45f0: 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20  >aMem;       /* 
4600: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20  Copy of p->aMem 
4610: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4620: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4630: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
4640: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4650: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
4660: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
4670: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4680: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
4690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
46a0: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
46b0: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
46c0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46d0: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
46e0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
46f0: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4700: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4710: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4720: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
4730: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
4740: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
4750: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
4760: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
4770: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
4780: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4790: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
47a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
47b0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
47c0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
47d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
47e0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
47f0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4800: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4810: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4820: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4830: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4840: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4850: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4860: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4870: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4880: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4890: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
48a0: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
48b0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
48c0: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
48d0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
48e0: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
48f0: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4900: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4910: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4920: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4930: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4940: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
4950: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
4960: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72  nly!=0 );.  p->r
4970: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
4980: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
4990: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
49a0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
49b0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
49c0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
49d0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
49e0: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
49f0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
4a00: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
4a10: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
4a20: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4a30: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
4a40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4a50: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4a60: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
4a70: 73 73 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ss ){.    assert
4a80: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
4a90: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
4aa0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28  rogressLimit = (
4ab0: 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75  unsigned)p->aCou
4ac0: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ad0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4ae0: 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65  .    if( nProgre
4af0: 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  ssLimit==0 ){.  
4b00: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4b10: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4b20: 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65  ssOps;.    }else
4b30: 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  {.      nProgres
4b40: 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67  sLimit %= (unsig
4b50: 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73  ned)db->nProgres
4b60: 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sOps;.    }.  }.
4b70: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4b80: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4b90: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4ba0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4bb0: 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70  ->pc==0.   && (p
4bc0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53  ->db->flags & (S
4bd0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4be0: 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  g|SQLITE_VdbeEQP
4bf0: 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  |SQLITE_VdbeTrac
4c00: 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  e))!=0.  ){.    
4c10: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f  int i;.    int o
4c20: 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  nce = 1;.    sql
4c30: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4c40: 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  (p);.    if( p->
4c50: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4c60: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29  TE_VdbeListing )
4c70: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
4c80: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4c90: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  ting:\n");.     
4ca0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4cb0: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4cc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4cd0: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20  ntOp(stdout, i, 
4ce0: 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20  &aOp[i]);.      
4cf0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4d00: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4d10: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b  QLITE_VdbeEQP ){
4d20: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
4d30: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
4d40: 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b          if( aOp[
4d50: 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  i].opcode==OP_Ex
4d60: 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
4d70: 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72     if( once ) pr
4d80: 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79  intf("VDBE Query
4d90: 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20   Plan:\n");.    
4da0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
4db0: 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a  \n", aOp[i].p4.z
4dc0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63  );.          onc
4dd0: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
4de0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
4df0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4e00: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4e10: 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66  eTrace )  printf
4e20: 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22  ("VDBE Trace:\n"
4e30: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
4e40: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4e50: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4e60: 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b  pOp=&aOp[p->pc];
4e70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4e80: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  pOp++){.    asse
4e90: 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20  rt( pOp>=aOp && 
4ea0: 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d  pOp<&aOp[p->nOp]
4eb0: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  );.    if( db->m
4ec0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
4ed0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65  to no_mem;.#ifde
4ee0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4ef0: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4f00: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4f10: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
4f20: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
4f30: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
4f40: 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70  STATUS.    if( p
4f50: 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e  ->anExec ) p->an
4f60: 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61  Exec[(int)(pOp-a
4f70: 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  Op)]++;.#endif..
4f80: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4f90: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4fa0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4fb0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4fc0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4fd0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4fe0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4ff0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
5000: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5010: 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28  p(stdout, (int)(
5020: 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29  pOp - aOp), pOp)
5030: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5040: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
5050: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
5060: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
5070: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
5080: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
5090: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
50a0: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
50b0: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
50c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
50d0: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
50e0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
50f0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
5100: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5110: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
5120: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5130: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5140: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5150: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5160: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5170: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53  #endif..    /* S
5180: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5190: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
51a0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
51b0: 45 5f 44 45 42 55 47 0a 20 20 20 20 61 73 73 65  E_DEBUG.    asse
51c0: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
51d0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
51e0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
51f0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
5200: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5210: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5220: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5230: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5240: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5250: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
5260: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5270: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5280: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5290: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1]) );.      ass
52a0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
52b0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
52c0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ts(&aMem[pOp->p1
52d0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
52e0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
52f0: 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p1, &aMem[pOp->p
5300: 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
5310: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5320: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5330: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5340: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5350: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5360: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
5370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5380: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5390: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
53a0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
53b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
53c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
53d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
53e0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
53f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5400: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
5410: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5420: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5430: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
5440: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5450: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5460: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5470: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5480: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
5490: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
54a0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
54b0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
54c0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
54d0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
54e0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
54f0: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5500: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5510: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
5520: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5530: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5540: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5550: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5560: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5570: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5580: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5590: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
55a0: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
55b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
55c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
55d0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
55e0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
55f0: 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a  FLG_OUT3)!=0 ){.
5600: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5610: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5620: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5630: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
5640: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5650: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
5660: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5670: 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  3]);.    }.#endi
5680: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
5690: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
56a0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
56b0: 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70  ILE).    pOrigOp
56c0: 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20   = pOp;.#endif. 
56d0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56e0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
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 2a 2a 2a 2a  ****************
5720: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5740: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5750: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5760: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5770: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5780: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5790: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
57a0: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
57b0: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57c0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57d0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57e0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57f0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5800: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5810: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5820: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5830: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5840: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5850: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5860: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5870: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5880: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5890: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
58a0: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
58b0: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58c0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58d0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58e0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58f0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5900: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5910: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5920: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5930: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5940: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5950: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5960: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5970: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5980: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5990: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
59a0: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
59b0: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59c0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59d0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59e0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59f0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5a00: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5a10: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a20: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a30: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a40: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a50: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a60: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a70: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a80: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a90: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5aa0: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5ab0: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5ac0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ad0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ae0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5af0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5b00: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5b10: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b20: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b30: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b40: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b50: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b60: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b70: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b80: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b90: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5ba0: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5bb0: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5bc0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bd0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5be0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bf0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5c00: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5c10: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c20: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c   in2, in3, out2,
5c30: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5c40: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5c50: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5c60: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5c70: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5c80: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5c90: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5ca0: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5cb0: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5cc0: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5cd0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5ce0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5cf0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5d00: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5d10: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5d20: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5d30: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5d40: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5d50: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5d60: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5d70: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5d80: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5d90: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5da0: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5db0: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5dc0: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5dd0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5de0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
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 2a 2a  ****************
5e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
5e40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
5e50: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
5e60: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
5e70: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
5e80: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
5e90: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
5ea0: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
5eb0: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
5ec0: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
5ed0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
5ee0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a   the program..**
5ef0: 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d  .** The P1 param
5f00: 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75  eter is not actu
5f10: 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69  ally used by thi
5f20: 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76  s opcode.  Howev
5f30: 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d  er, it.** is som
5f40: 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20  etimes set to 1 
5f50: 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20  instead of 0 as 
5f60: 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f  a hint to the co
5f70: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
5f80: 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f  .** that this Go
5f90: 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d  to is the bottom
5fa0: 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74   of a loop and t
5fb0: 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72  hat the lines fr
5fc0: 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f  om P2 down.** to
5fd0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e   the current lin
5fe0: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5ff0: 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e  nted for EXPLAIN
6000: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
6010: 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20   OP_Goto: {     
6020: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
6030: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  */.jump_to_p2_an
6040: 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
6050: 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26  rrupt:.  pOp = &
6060: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
6070: 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20  ;..  /* Opcodes 
6080: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
6090: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
60a0: 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20   loop (OP_Next, 
60b0: 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50  OP_Prev,.  ** OP
60c0: 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65  _VNext, OP_RowSe
60d0: 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72  tNext, or OP_Sor
60e0: 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d  terNext) all jum
60f0: 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a  p here upon.  **
6100: 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68   completion.  Ch
6110: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71  eck to see if sq
6120: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
6130: 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
6140: 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65  d.  ** or if the
6150: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6160: 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69  ck needs to be i
6170: 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20  nvoked. .  **.  
6180: 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65  ** This code use
6190: 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22  s unstructured "
61a0: 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73  goto" statements
61b0: 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f   and does not lo
61c0: 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42  ok clean..  ** B
61d0: 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64  ut that is not d
61e0: 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64  ue to sloppy cod
61f0: 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20  ing habits. The 
6200: 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20  code is written 
6210: 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f  this.  ** way fo
6220: 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74  r performance, t
6230: 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74  o avoid having t
6240: 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72  o run the interr
6250: 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73  upt and progress
6260: 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20  .  ** checks on 
6270: 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54  every opcode.  T
6280: 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65  his helps sqlite
6290: 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20  3_step() to run 
62a0: 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20  about 1.5%.  ** 
62b0: 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67  faster according
62c0: 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d   to "valgrind --
62d0: 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22  tool=cachegrind"
62e0: 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e   */.check_for_in
62f0: 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64  terrupt:.  if( d
6300: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
6310: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
6320: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
6330: 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
6340: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
6350: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61  CALLBACK.  /* Ca
6360: 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  ll the progress 
6370: 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69  callback if it i
6380: 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64  s configured and
6390: 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75   the required nu
63a0: 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42  mber.  ** of VDB
63b0: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
63c0: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
63d0: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
63e0: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73  cation of.  ** s
63f0: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29  qlite3VdbeExec()
6400: 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74   or since last t
6410: 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73  ime the progress
6420: 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61   callback was ca
6430: 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74  lled)..  ** If t
6440: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6450: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e  back returns non
6460: 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20  -zero, exit the 
6470: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6480: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75  with.  ** a retu
6490: 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41  rn code SQLITE_A
64a0: 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  BORT..  */.  if(
64b0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
64c0: 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50  0 && nVmStep>=nP
64d0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a  rogressLimit ){.
64e0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
64f0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20  nProgressOps!=0 
6500: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
6510: 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20  Limit = nVmStep 
6520: 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  + db->nProgressO
6530: 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62  ps - (nVmStep%db
6540: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b  ->nProgressOps);
6550: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
6560: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
6570: 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20  ressArg) ){.    
6580: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
6590: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67  TERRUPT;.      g
65a0: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
65b0: 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  alt;.    }.  }.#
65c0: 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b  endif.  .  break
65d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
65e0: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
65f0: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6600: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6610: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6620: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6630: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6640: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6650: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6660: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6680: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
6690: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
66a0: 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  r) );.  pIn1 = &
66b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
66c0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
66d0: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
66e0: 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   );.  memAboutTo
66f0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
6700: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6710: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
6720: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
6730: 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  p-aOp);.  REGIST
6740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6750: 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d  , pIn1);..  /* M
6760: 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69  ost jump operati
6770: 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f  ons do a goto to
6780: 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72   this spot in or
6790: 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20  der to update.  
67a0: 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74  ** the pOp point
67b0: 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  er. */.jump_to_p
67c0: 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  2:.  pOp = &aOp[
67d0: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
67e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
67f0: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6800: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
6810: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
6820: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
6830: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6840: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
6850: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
6860: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
6870: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6880: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6890: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
68a0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
68b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
68c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
68d0: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
68e0: 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70   );.  pOp = &aOp
68f0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70  [pIn1->u.i];.  p
6900: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6910: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
6920: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6930: 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  e: InitCoroutine
6940: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
6950: 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73  .** Set up regis
6960: 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  ter P1 so that i
6970: 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20  t will Yield to 
6980: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a  the coroutine.**
6990: 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72   located at addr
69a0: 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ess P3..**.** If
69b0: 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P2!=0 then the 
69c0: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
69d0: 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61  entation immedia
69e0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20  tely follows.** 
69f0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f  this opcode.  So
6a00: 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63   jump over the c
6a10: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
6a20: 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64  ntation to.** ad
6a30: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  dress P2..**.** 
6a40: 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72  See also: EndCor
6a50: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
6a60: 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a  P_InitCoroutine:
6a70: 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a   {     /* jump *
6a80: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6a90: 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70  >p1>0 &&  pOp->p
6aa0: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
6ab0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6ac0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6ad0: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6ae0: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6af0: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6b00: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6b10: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6b20: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6b30: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6b40: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6b50: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6b60: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6b70: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6b80: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6b90: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
6ba0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6bb0: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
6bc0: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
6bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
6be0: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
6bf0: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6c00: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
6c10: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6c20: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6c30: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
6c40: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6c50: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6c60: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6c70: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6c80: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6c90: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
6ca0: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
6cb0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
6cc0: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
6cd0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6ce0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6cf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6d00: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
6d10: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
6d20: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
6d30: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
6d40: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
6d50: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
6d60: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
6d70: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
6d80: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
6d90: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
6da0: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
6db0: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
6dc0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
6dd0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
6de0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
6df0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6e00: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
6e10: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
6e20: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
6e30: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6e40: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6e50: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
6e60: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
6e70: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
6e80: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
6e90: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
6ea0: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
6eb0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
6ec0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
6ed0: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
6ee0: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
6ef0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
6f00: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
6f10: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
6f20: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
6f30: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
6f40: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
6f50: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
6f60: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
6f70: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
6f80: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
6f90: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
6fa0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6fb0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6fc0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
6fe0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
6ff0: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7010: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7020: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7030: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
7040: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7050: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
7060: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
7070: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
7080: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
7090: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
70a0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
70b0: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
70c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
70d0: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
70e0: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
70f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7100: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7110: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7120: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7130: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
7140: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
7150: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
7160: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
7170: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
7180: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
7190: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
71a0: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
71b0: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
71c0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
71d0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
71e0: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
71f0: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7200: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7210: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7220: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7230: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
7240: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
7250: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7260: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7270: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7280: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7290: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
72a0: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
72b0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
72c0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
72d0: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
72e0: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
72f0: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7300: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7310: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7320: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7330: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
7340: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7350: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7360: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7370: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7380: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7390: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
73a0: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
73b0: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
73c0: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
73d0: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
73e0: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
73f0: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7400: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7410: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7420: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7430: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
7440: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7450: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7460: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7470: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7480: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7490: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
74a0: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
74b0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
74c0: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
74d0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
74e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
74f0: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7500: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7510: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7520: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7530: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
7540: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7550: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7560: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7570: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7580: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7590: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
75a0: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
75b0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
75c0: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
75d0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
75e0: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
75f0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7600: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7610: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7620: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7630: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7640: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7650: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7660: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7670: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7680: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7690: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
76a0: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
76b0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
76c0: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
76d0: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
76e0: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
76f0: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7700: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7710: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7720: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7730: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7740: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7750: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7760: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
7770: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56  ar *zLogFmt;.  V
7780: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7790: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
77a0: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
77b0: 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f  - aOp);.  if( pO
77c0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
77d0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
77e0: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
77f0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
7800: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
7810: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
7820: 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20  . */.    pFrame 
7830: 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20  = p->pFrame;.   
7840: 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
7850: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20  ame->pParent;.  
7860: 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20    p->nFrame--;. 
7870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7880: 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
7890: 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63  nChange);.    pc
78a0: 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  x = sqlite3VdbeF
78b0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
78c0: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
78d0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
78e0: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
78f0: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7900: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7910: 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68  uction pcx is th
7920: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7930: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7940: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7950: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
7960: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
7970: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
7980: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
7990: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
79a0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
79b0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
79c0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
79d0: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
79e0: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
79f0: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7a00: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7a10: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7a20: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7a30: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7a40: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7a50: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
7a60: 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e  x = p->aOp[pcx].
7a70: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
7a80: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
7a90: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
7aa0: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
7ab0: 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b  [pcx];.    break
7ac0: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
7ad0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
7ae0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
7af0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
7b00: 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d   = pcx;.  if( p-
7b10: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
7b20: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
7b30: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
7b40: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
7b50: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
7b60: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
7b70: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
7bb0: 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   };.      assert
7bc0: 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20  ( pOp->p5>=1 && 
7bd0: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
7be0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7bf0: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
7c00: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7c10: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
7c20: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7c30: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
7c40: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7c50: 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70  =4 );.      zTyp
7c60: 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  e = azType[pOp->
7c70: 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  p5-1];.    }else
7c80: 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  {.      zType = 
7c90: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  0;.    }.    ass
7ca0: 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c  ert( zType!=0 ||
7cb0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7cc0: 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22  .    zLogFmt = "
7cd0: 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b  abort at %d in [
7ce0: 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66  %s]: %s";.    if
7cf0: 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e  ( zType && pOp->
7d00: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71  p4.z ){.      sq
7d10: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
7d20: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
7d30: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7d40: 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20 20 20  ailed: %s", .   
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e      zType, pOp->
7d70: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7d80: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
7d90: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7da0: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7db0: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
7dc0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7dd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7de0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
7df0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
7e00: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
7e10: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
7e20: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
7e30: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
7e40: 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a  ogFmt, pcx, p->z
7e50: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7e60: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7e70: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7e80: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7e90: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7ea0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7eb0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7ec0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7ed0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7ee0: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7ef0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7f00: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7f10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f20: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
7f30: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
7f40: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7f50: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f60: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7f70: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7f80: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7f90: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7fa0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7fb0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7fc0: 7d 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  }.  pOp = &aOp[p
7fd0: 63 78 5d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  cx];.  goto vdbe
7fe0: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
7ff0: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
8000: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
8010: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31  nopsis: r[P2]=P1
8020: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
8030: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
8040: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
8050: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8060: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
8070: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
8080: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
8090: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
80a0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
80b0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
80c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
80d0: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
80e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
80f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
8100: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8110: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
8120: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
8130: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8140: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8150: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8160: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
8170: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8180: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8190: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
81a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
81b0: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
81c0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
81d0: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
81e0: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
81f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
8200: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
8210: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
8220: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8230: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
8240: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
8250: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
8260: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
8270: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
8280: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
8290: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
82a0: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
82b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
82c0: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
82d0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
82e0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
82f0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8300: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
8310: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
8320: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
8330: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
8340: 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.r = *pOp->p
8350: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
8360: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
8370: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
8380: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8390: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
83a0: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
83b0: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
83c0: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
83d0: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
83e0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
83f0: 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e  .** into a Strin
8400: 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20  g opcode before 
8410: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
8420: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
8430: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
8440: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
8450: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
8460: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
8470: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
8480: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
8490: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
84a0: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
84b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
84c0: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
84d0: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
84e0: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
84f0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8500: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8510: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
8520: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
8530: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
8540: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
8550: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
8560: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
8570: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
8580: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
8590: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
85a0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
85b0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
85c0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
85d0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
85e0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
85f0: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
8600: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
8610: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
8620: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
8630: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
8640: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
8650: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
8660: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
8670: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
8680: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
8690: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
86a0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
86b0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
86c0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
86d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
86e0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
86f0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
8700: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
8710: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
8720: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
8730: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
8740: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
8750: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
8760: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
8770: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
8780: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
8790: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
87a0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
87b0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
87c0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
87d0: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
87e0: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
87f0: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
8800: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
8810: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8820: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
8830: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8840: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
8850: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
8860: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
8870: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
8880: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
8890: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
88a0: 49 66 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65  If P5!=0 and the
88b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
88c0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
88d0: 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
88e0: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79  en.** the dataty
88f0: 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
8900: 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74  er P2 is convert
8910: 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65  ed to BLOB.  The
8920: 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74   content is.** t
8930: 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65  he same sequence
8940: 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73   of bytes, it is
8950: 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65   merely interpre
8960: 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  ted as a BLOB in
8970: 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74  stead.** of a st
8980: 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68  ring, as if it h
8990: 61 64 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f  ad been CAST..*/
89a0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
89b0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
89c0: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
89d0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
89e0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
89f0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8a00: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8a10: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
8a20: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
8a30: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
8a40: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
8a50: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
8a60: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
8a70: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
8a80: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8a90: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
8aa0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8ab0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73  ->p3>0 );.    as
8ac0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8ad0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8ae0: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8af0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8b00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8b10: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8b20: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8b30: 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d  In3->u.i ) pOut-
8b40: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
8b50: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
8b60: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  _Term;.  }.  bre
8b70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8b80: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8b90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8ba0: 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c    r[P2..P3]=NULL
8bb0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
8bc0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8bd0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
8be0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
8bf0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
8c00: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
8c10: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
8c20: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
8c30: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
8c40: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
8c50: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
8c60: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
8c70: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
8c80: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
8c90: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
8ca0: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
8cb0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
8cc0: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
8cd0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
8ce0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
8cf0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
8d00: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
8d10: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
8d20: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
8d30: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
8d40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
8d50: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
8d60: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
8d70: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
8d80: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
8d90: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8da0: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
8db0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
8dc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
8dd0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
8de0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
8df0: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
8e00: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
8e10: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
8e20: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
8e30: 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  ;.  while( cnt>0
8e40: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
8e50: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
8e60: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
8e70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8e80: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
8e90: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
8ea0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
8eb0: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
8ec0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8ed0: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
8ee0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
8ef0: 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  s:  r[P1]=NULL.*
8f00: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
8f10: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
8f20: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
8f30: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
8f40: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
8f50: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
8f60: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
8f70: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
8f80: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
8f90: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
8fa0: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
8fb0: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
8fc0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
8fd0: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
8fe0: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
8ff0: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9000: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9010: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9020: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9030: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
9040: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
9050: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
9060: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
9070: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9080: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9090: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
90a0: 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29  >flags|MEM_Null)
90b0: 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  &~MEM_Undefined;
90c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
90d0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
90e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
90f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20  opsis: r[P2]=P4 
9100: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50  (len=P1).**.** P
9110: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
9120: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
9130: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
9140: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
9150: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
9160: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
9190: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
91a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
91b0: 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  H );.  pOut = ou
91c0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
91d0: 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  pOp);.  sqlite3V
91e0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
91f0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
9200: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
9210: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
9220: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
9230: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
9240: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9250: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
9260: 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  le P1 P2 * P4 *.
9270: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9280: 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c  2]=parameter(P1,
9290: 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P4).**.** Transf
92a0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
92b0: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
92c0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
92d0: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
92e0: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
92f0: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
9300: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
9310: 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  4..** The P4 val
9320: 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71  ue is used by sq
9330: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
9340: 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a  eter_name()..*/.
9350: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
9360: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9370: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20  * out2 */.  Mem 
9380: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
9390: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
93a0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
93b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
93c0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
93d0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
93e0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
93f0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9400: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9410: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9420: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9430: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9440: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9450: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
9460: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70  too_big;.  }.  p
9470: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9480: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9490: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
94a0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
94b0: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
94c0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
94d0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
94e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
94f0: 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50  pcode: Move P1 P
9500: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9510: 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d  psis:  r[P2@P3]=
9520: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9530: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9540: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9550: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9560: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9570: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
9580: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9590: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
95a0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
95b0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
95c0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
95d0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
95e0: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
95f0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9600: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9610: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9620: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9630: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9640: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9650: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9660: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9670: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
9680: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
9690: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
96a0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
96b0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
96c0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
96d0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
96e0: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
96f0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9700: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9710: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9720: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9730: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9740: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9750: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9760: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9770: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9780: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9790: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
97a0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
97b0: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
97c0: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
97d0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
97e0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
97f0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
9800: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9810: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9820: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
9830: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
9840: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9850: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9860: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9870: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9880: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
9890: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
98a0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
98b0: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
98c0: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
98d0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
98e0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
98f0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
9900: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
9910: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
9920: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
9930: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9940: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
9950: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9960: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
9970: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
9980: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
9990: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
99a0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
99b0: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
99c0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
99d0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
99e0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
99f0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
9a00: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
9a10: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
9a20: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
9a30: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
9a40: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
9a50: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
9a60: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
9a70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9a80: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9a90: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
9aa0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
9ab0: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
9ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9ad0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9ae0: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
9af0: 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  em);.    Deephem
9b00: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23  eralize(pOut);.#
9b10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
9b20: 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  UG.    pOut->pSc
9b30: 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e  opyFrom = 0;.#en
9b40: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
9b50: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70  _TRACE(pOp->p2+p
9b60: 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b  Op->p3-n, pOut);
9b70: 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d  .    if( (n--)==
9b80: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
9b90: 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b  Out++;.    pIn1+
9ba0: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
9bb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
9bc0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
9bd0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9be0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d  2]=r[P1].**.** M
9bf0: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
9c00: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
9c10: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9c20: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
9c30: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9c40: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9c50: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
9c60: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
9c70: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9c80: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
9c90: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
9ca0: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
9cb0: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
9cc0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9cd0: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
9ce0: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
9cf0: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
9d00: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
9d10: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
9d20: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
9d30: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
9d40: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
9d50: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
9d60: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
9d70: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
9d80: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
9d90: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
9da0: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
9db0: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
9dc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
9dd0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
9de0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
9df0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
9e00: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9e10: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
9e20: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
9e30: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
9e40: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9e50: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
9e60: 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20  _Ephem);.#ifdef 
9e70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
9e80: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
9e90: 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70  rom==0 ) pOut->p
9ea0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
9eb0: 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  ;.#endif.  break
9ec0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9ed0: 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20  ResultRow P1 P2 
9ee0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9ef0: 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40  s:  output=r[P1@
9f00: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P2].**.** The re
9f10: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
9f20: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
9f30: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
9f40: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
9f50: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
9f60: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
9f70: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
9f80: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
9f90: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
9fa0: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
9fb0: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
9fc0: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
9fd0: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
9fe0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 72   access to the r
9ff0: 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29  (P1)..r(P1+P2-1)
a000: 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68   values as.** th
a010: 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f  e result row..*/
a020: 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52  .case OP_ResultR
a030: 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  ow: {.  Mem *pMe
a040: 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73  m;.  int i;.  as
a050: 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c  sert( p->nResCol
a060: 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a  umn==pOp->p2 );.
a070: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a080: 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  1>0 );.  assert(
a090: 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32   pOp->p1+pOp->p2
a0a0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
a0b0: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
a0c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a0d0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a0e0: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
a0f0: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
a100: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
a110: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
a120: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
a130: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
a140: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
a150: 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f  t.   && db->xPro
a160: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
a170: 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a  essArg)!=0.  ){.
a180: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
a190: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67  INTERRUPT;.    g
a1a0: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
a1b0: 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  alt;.  }.#endif.
a1c0: 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74  .  /* If this st
a1d0: 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c  atement has viol
a1e0: 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66  ated immediate f
a1f0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
a200: 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20  raints, do.  ** 
a210: 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e  not return the n
a220: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f  umber of rows mo
a230: 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e  dified. And do n
a240: 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73  ot RELEASE the s
a250: 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72  tatement.  ** tr
a260: 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65  ansaction. It ne
a270: 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
a280: 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28   back.  */.  if(
a290: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20   SQLITE_OK!=(rc 
a2a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
a2b0: 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20  ckFk(p, 0)) ){. 
a2c0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66     assert( db->f
a2d0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
a2e0: 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73  tRows );.    ass
a2f0: 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74  ert( p->usesStmt
a300: 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62  Journal );.    b
a310: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
a320: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
a330: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
a340: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
a350: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
a360: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
a370: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
a380: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
a390: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a3a0: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
a3b0: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
a3c0: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
a3d0: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
a3e0: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
a3f0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
a400: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
a410: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
a420: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
a430: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
a440: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
a450: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
a460: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
a470: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
a480: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
a490: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
a4a0: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a4b0: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
a4c0: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
a4d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
a4e0: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
a4f0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
a500: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
a510: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a520: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
a530: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
a540: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
a550: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
a560: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
a570: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
a580: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
a590: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
a5a0: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
a5b0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a5c0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
a5d0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
a5e0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
a5f0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
a600: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
a610: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
a620: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
a630: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
a640: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
a650: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
a660: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
a670: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
a680: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
a690: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
a6a0: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
a6b0: 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45  LEASE);.  if( NE
a6c0: 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
a6d0: 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  K) ){.    break;
a6e0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  .  }..  /* Inval
a6f0: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
a700: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
a710: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
a720: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
a730: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
a740: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
a750: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
a760: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
a770: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
a780: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
a790: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
a7a0: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
a7b0: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
a7c0: 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64  ed as.  ** a sid
a7d0: 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20  e effect..  */. 
a7e0: 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75   pMem = p->pResu
a7f0: 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  ltSet = &aMem[pO
a800: 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p1];.  for(i=
a810: 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b  0; i<pOp->p2; i+
a820: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
a830: 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d  memIsValid(&pMem
a840: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70  [i]) );.    Deep
a850: 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d  hemeralize(&pMem
a860: 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  [i]);.    assert
a870: 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  ( (pMem[i].flags
a880: 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30   & MEM_Ephem)==0
a890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
a8a0: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
a8b0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
a8c0: 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ob))==0 );.    s
a8d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c  qlite3VdbeMemNul
a8e0: 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b  Terminate(&pMem[
a8f0: 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  i]);.    REGISTE
a900: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b  R_TRACE(pOp->p1+
a910: 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  i, &pMem[i]);.  
a920: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  }.  if( db->mall
a930: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
a940: 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65  no_mem;..  /* Re
a950: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
a960: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28    */.  p->pc = (
a970: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20  int)(pOp - aOp) 
a980: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
a990: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
a9a0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
a9b0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
a9c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a9d0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
a9e0: 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]+r[P1].**.
a9f0: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
aa00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
aa10: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
aa20: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
aa30: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
aa40: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
aa50: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
aa60: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
aa70: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
aa80: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
aa90: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
aaa0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
aab0: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
aac0: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
aad0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
aae0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
aaf0: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
ab00: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
ab10: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
ab20: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
ab30: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
ab40: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
ab50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
ab60: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
ab70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
ab80: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
ab90: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
aba0: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
abb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
abc0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
abd0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
abe0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
abf0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
ac00: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
ac10: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
ac20: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
ac30: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
ac40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
ac50: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
ac60: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
ac70: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
ac80: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
ac90: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
aca0: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
acb0: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
acc0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
acd0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
ace0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
acf0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
ad00: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
ad10: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
ad20: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
ad30: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
ad40: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
ad50: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
ad60: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
ad70: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
ad80: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
ad90: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
ada0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
adb0: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
adc0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
add0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
ade0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
adf0: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
ae00: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
ae10: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
ae20: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
ae30: 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  =0;.  pOut->z[nB
ae40: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
ae50: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
ae60: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
ae70: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
ae80: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
ae90: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
aea0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
aeb0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
aec0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
aed0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
aee0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
aef0: 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]+r[P2].**.*
af00: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
af10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
af20: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
af30: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
af40: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
af50: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
af60: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
af70: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
af80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
af90: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
afa0: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
afb0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
afc0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
afd0: 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  *r[P2].**.**.** 
afe0: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
aff0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b000: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
b010: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b020: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b030: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b040: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b050: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b060: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b070: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b080: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
b090: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b0a0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
b0b0: 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]-r[P1].**.** 
b0c0: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
b0d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b0e0: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
b0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b100: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b110: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b120: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b130: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b140: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b150: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b160: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
b170: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b180: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
b190: 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]/r[P1].**.** 
b1a0: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
b1b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b1c0: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b1d0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b1e0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b1f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b200: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
b210: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
b220: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
b230: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
b240: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b250: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b260: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
b270: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b280: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b290: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
b2a0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b2b0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
b2c0: 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  %r[P1].**.** Com
b2d0: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
b2e0: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
b2f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
b300: 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72  divided by .** r
b310: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73  egister P1 and s
b320: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b330: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
b340: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
b350: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b360: 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75  is zero the resu
b370: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49  lt is NULL..** I
b380: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
b390: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b3a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b3b0: 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20  .case OP_Add:   
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c  /* same as TK_PL
b3e0: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
b3f0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75  t3 */.case OP_Su
b400: 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20  btract:         
b410: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b420: 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69  TK_MINUS, in1, i
b430: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b440: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
b450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b460: 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69  me as TK_STAR, i
b470: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b480: 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a  .case OP_Divide:
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c  /* same as TK_SL
b4b0: 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  ASH, in1, in2, o
b4c0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ut3 */.case OP_R
b4d0: 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20  emainder: {     
b4e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b4f0: 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e   TK_REM, in1, in
b500: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61  2, out3 */.  cha
b510: 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20  r bIntint;   /* 
b520: 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74  Started out as t
b530: 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61  wo integer opera
b540: 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  nds */.  u16 fla
b550: 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62  gs;      /* Comb
b560: 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73  ined MEM_* flags
b570: 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74   from both input
b580: 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31  s */.  u16 type1
b590: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
b5a0: 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f  c type of left o
b5b0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20  perand */.  u16 
b5c0: 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e  type2;      /* N
b5d0: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72  umeric type of r
b5e0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b5f0: 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20    i64 iA;       
b600: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
b610: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
b620: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20  nd */.  i64 iB; 
b630: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
b640: 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68  er value of righ
b650: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
b660: 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f  ouble rA;      /
b670: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
b680: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b690: 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20    double rB;    
b6a0: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
b6b0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b6c0: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
b6d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b6e0: 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54  type1 = numericT
b6f0: 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ype(pIn1);.  pIn
b700: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
b710: 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75  2];.  type2 = nu
b720: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b  mericType(pIn2);
b730: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
b740: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
b750: 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  s = pIn1->flags 
b760: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20  | pIn2->flags;. 
b770: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
b780: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74  M_Null)!=0 ) got
b790: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b7a0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69  ult_is_null;.  i
b7b0: 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65  f( (type1 & type
b7c0: 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  2 & MEM_Int)!=0 
b7d0: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
b7e0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
b7f0: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62  pIn2->u.i;.    b
b800: 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  Intint = 1;.    
b810: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
b820: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
b830: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b840: 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e  if( sqlite3AddIn
b850: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b860: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b870: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b880: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28  P_Subtract:  if(
b890: 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
b8a0: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b8b0: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b8c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
b8d0: 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71  ultiply:  if( sq
b8e0: 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69  lite3MulInt64(&i
b8f0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
b900: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
b910: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
b920: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  de: {.        if
b930: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
b940: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b950: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b960: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20    if( iA==-1 && 
b970: 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  iB==SMALLEST_INT
b980: 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  64 ) goto fp_mat
b990: 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  h;.        iB /=
b9a0: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
b9b0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
b9c0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
b9d0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
b9e0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b9f0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
ba00: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
ba10: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
ba20: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
ba30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
ba40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
ba50: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
ba60: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
ba70: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
ba80: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
ba90: 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70   bIntint = 0;.fp
baa0: 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20  _math:.    rA = 
bab0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
bac0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
bad0: 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rB = sqlite3Vdbe
bae0: 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b  RealValue(pIn2);
baf0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
bb00: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
bb10: 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20    case OP_Add:  
bb20: 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b         rB += rA;
bb30: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bb40: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
bb50: 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72  ract:    rB -= r
bb60: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
bb70: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
bb80: 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d  ltiply:    rB *=
bb90: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
bba0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bbb0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
bbc0: 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49    /* (double)0 I
bbd0: 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45  n case of SQLITE
bbe0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
bbf0: 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  OINT... */.     
bc00: 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62     if( rA==(doub
bc10: 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74  le)0 ) goto arit
bc20: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bc30: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72  _null;.        r
bc40: 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20  B /= rA;.       
bc50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
bc60: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
bc70: 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69  .        iA = (i
bc80: 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69  64)rA;.        i
bc90: 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20  B = (i64)rB;.   
bca0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
bcb0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
bcc0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
bcd0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bce0: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
bcf0: 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62        rB = (doub
bd00: 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20  le)(iB % iA);.  
bd10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bd20: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65     }.    }.#ifde
bd30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
bd40: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
bd50: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b   pOut->u.i = rB;
bd60: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
bd70: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
bd80: 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66  t);.#else.    if
bd90: 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72  ( sqlite3IsNaN(r
bda0: 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  B) ){.      goto
bdb0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bdc0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bdd0: 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20  }.    pOut->u.r 
bde0: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
bdf0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
be00: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66  EM_Real);.    if
be10: 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29  ( ((type1|type2)
be20: 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26  &MEM_Real)==0 &&
be30: 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20   !bIntint ){.   
be40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
be50: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f  tegerAffinity(pO
be60: 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ut);.    }.#endi
be70: 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  f.  }.  break;..
be80: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
be90: 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c  t_is_null:.  sql
bea0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
beb0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ll(pOut);.  brea
bec0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bed0: 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20   CollSeq P1 * * 
bee0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
bef0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
bf00: 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66  llSeq struct. If
bf10: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
bf20: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
bf30: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
bf40: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
bf50: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
bf60: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
bf70: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
bf80: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
bf90: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
bfa0: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
bfb0: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
bfc0: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
bfd0: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  s..**.** If P1 i
bfe0: 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
bff0: 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65   it is a registe
c000: 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75  r that a subsequ
c010: 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20  ent min() or.** 
c020: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
c030: 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66  will set to 1 if
c040: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
c050: 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69   is not the mini
c060: 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75  mum or.** maximu
c070: 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73  m.  The P1 regis
c080: 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  ter is initializ
c090: 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20  ed to 0 by this 
c0a0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
c0b0: 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
c0c0: 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70   used by the imp
c0d0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
c0e0: 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65  he aforementione
c0f0: 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74  d functions.** t
c100: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63  o retrieve the c
c110: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
c120: 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70  e set by this op
c130: 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69  code is not avai
c140: 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c  lable.** publicl
c150: 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69  y.  Only built-i
c160: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  n functions have
c170: 20 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20   access to this 
c180: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
c190: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
c1a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
c1b0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
c1c0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
c1d0: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
c1e0: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
c1f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
c200: 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
c210: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
c220: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
c230: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c240: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c250: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c260: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c270: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c280: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c290: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
c2a0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
c2b0: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
c2c0: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
c2d0: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
c2e0: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
c2f0: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
c300: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
c310: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
c320: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c330: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
c340: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
c350: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
c360: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
c370: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
c380: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
c390: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
c3a0: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
c3b0: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
c3c0: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
c3d0: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
c3e0: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
c3f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
c400: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
c410: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
c420: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
c430: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
c440: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
c450: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
c460: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
c470: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
c480: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
c490: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
c4a0: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
c4b0: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
c4c0: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
c4d0: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
c4e0: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
c4f0: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
c500: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
c510: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
c520: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
c530: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
c540: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
c550: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
c560: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
c570: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  ;.  int n;..  n 
c580: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56  = pOp->p5;.  apV
c590: 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
c5a0: 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
c5b0: 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  | n==0 );.  asse
c5c0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
c5d0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
c5e0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
c5f0: 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26  ;.  ctx.pOut = &
c600: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
c610: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c620: 65 28 70 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a  e(p, ctx.pOut);.
c630: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
c640: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
c650: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
c660: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
c670: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
c680: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
c690: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
c6a0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
c6b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
c6c0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
c6d0: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
c6e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
c6f0: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
c700: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
c710: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
c720: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
c730: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
c740: 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41  CE(pOp->p2+i, pA
c750: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
c760: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c770: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
c780: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
c790: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74  ->p4.pFunc;.  ct
c7a0: 78 2e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f  x.iOp = (int)(pO
c7b0: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 63 74 78 2e  p - aOp);.  ctx.
c7c0: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 4d 65 6d  pVdbe = p;.  Mem
c7d0: 53 65 74 54 79 70 65 46 6c 61 67 28 63 74 78 2e  SetTypeFlag(ctx.
c7e0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
c7f0: 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41  .  ctx.fErrorOrA
c800: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
c810: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
c820: 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75  wid;.  (*ctx.pFu
c830: 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c  nc->xFunc)(&ctx,
c840: 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49   n, apVal); /* I
c850: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
c860: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
c870: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
c880: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
c890: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
c8a0: 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a 0a 20  e by xFunc */.. 
c8b0: 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74   /* If the funct
c8c0: 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20  ion returned an 
c8d0: 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20  error, throw an 
c8e0: 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69  exception */.  i
c8f0: 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41  f( ctx.fErrorOrA
c900: 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 63 74  ux ){.    if( ct
c910: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
c920: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
c930: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
c940: 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
c950: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 63 74  e3_value_text(ct
c960: 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20  x.pOut));.      
c970: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
c980: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
c990: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
c9a0: 44 61 74 61 28 70 2c 20 28 69 6e 74 29 28 70 4f  Data(p, (int)(pO
c9b0: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 2d 3e 70  p - aOp), pOp->p
c9c0: 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  1);.  }..  /* Co
c9d0: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
c9e0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
c9f0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
ca00: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  /.  sqlite3VdbeC
ca10: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 63 74  hangeEncoding(ct
ca20: 78 2e 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  x.pOut, encoding
ca30: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ca40: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 63 74  VdbeMemTooBig(ct
ca50: 78 2e 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  x.pOut) ){.    g
ca60: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
ca70: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
ca80: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 63 74 78 2e  CE(pOp->p3, ctx.
ca90: 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
caa0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 63 74 78  MAX_BLOBSIZE(ctx
cab0: 2e 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  .pOut);.  break;
cac0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
cad0: 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  itAnd P1 P2 P3 *
cae0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
caf0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50   r[P3]=r[P1]&r[P
cb00: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
cb10: 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f  e bit-wise AND o
cb20: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
cb30: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
cb40: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
cb50: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cb60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
cb70: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
cb80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
cb90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
cba0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50   Opcode: BitOr P
cbb0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
cbc0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
cbd0: 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]|r[P2].**.*
cbe0: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
cbf0: 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61  ise OR of the va
cc00: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
cc10: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
cc20: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
cc30: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
cc40: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
cc50: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cc60: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cc70: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
cc80: 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32   ShiftLeft P1 P2
cc90: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cca0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
ccb0: 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]<<r[P1].**.** S
ccc0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
ccd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cce0: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
ccf0: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
cd00: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
cd10: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
cd20: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
cd30: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
cd40: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
cd50: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
cd60: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
cd70: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
cd80: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
cd90: 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74  code: ShiftRight
cda0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
cdb0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
cdc0: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
cdd0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
cde0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
cdf0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
ce00: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
ce10: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
ce20: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
ce30: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
ce40: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
ce50: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
ce60: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ce70: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
ce80: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
ce90: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cea0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
ceb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
cec0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ced0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
cee0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
cef0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
cf00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cf10: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
cf20: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cf30: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
cf40: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
cf50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
cf60: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cf70: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cf80: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
cf90: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cfa0: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
cfb0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cfc0: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
cfd0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
cfe0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
cff0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d000: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
d010: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
d020: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
d030: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
d040: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
d050: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
d060: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
d070: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
d080: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
d090: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
d0a0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
d0b0: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
d0c0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
d0d0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
d0e0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
d0f0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
d100: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
d110: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
d120: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
d130: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
d140: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
d150: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
d160: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
d170: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
d180: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
d190: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
d1a0: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
d1b0: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
d1c0: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
d1d0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
d1e0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
d1f0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
d200: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
d210: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
d220: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
d230: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
d240: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
d250: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
d260: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
d270: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
d280: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
d290: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
d2a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
d2b0: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
d2c0: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
d2d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
d2e0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
d2f0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
d300: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d310: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
d320: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
d330: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
d340: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
d350: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
d360: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
d370: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
d380: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
d390: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
d3a0: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
d3b0: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
d3c0: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
d3d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
d3e0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
d3f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d400: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
d410: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d420: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
d430: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
d440: 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b  opsis:  r[P1]=r[
d450: 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64  P1]+P2.** .** Ad
d460: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
d470: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
d480: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
d490: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
d4a0: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
d4b0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
d4c0: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
d4d0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
d4e0: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
d4f0: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
d500: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
d510: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d520: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d530: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
d540: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73  ge(p, pIn1);.  s
d550: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
d560: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
d570: 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
d580: 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p2;.  break;.
d590: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
d5a0: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
d5b0: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
d5c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d5d0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d5e0: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
d5f0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
d600: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
d610: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
d620: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
d630: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
d640: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
d650: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
d660: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
d670: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
d680: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
d690: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
d6a0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
d6b0: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
d6c0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
d6d0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d6e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d6f0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
d700: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
d710: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
d720: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
d730: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
d740: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64  ncoding);.    Vd
d750: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70  beBranchTaken((p
d760: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
d770: 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  nt)==0, 2);.    
d780: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d790: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
d7a0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
d7b0: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
d7c0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
d7d0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
d7e0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
d7f0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
d800: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
d810: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
d820: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
d830: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d840: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
d850: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
d860: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d870: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
d880: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
d890: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
d8a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
d8b0: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
d8c0: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
d8d0: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
d8e0: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
d8f0: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
d900: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
d910: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
d920: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
d930: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
d940: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
d950: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
d960: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
d970: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
d980: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
d990: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
d9a0: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
d9b0: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
d9c0: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
d9d0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
d9e0: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da00: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
da10: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
da20: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
da30: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
da40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
da50: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
da60: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
da70: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
da80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
da90: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73  T./* Opcode: Cas
daa0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
dab0: 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
dac0: 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a  ity(r[P1]).**.**
dad0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
dae0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
daf0: 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64  to be the type d
db00: 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a  efined by P2..**
db10: 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69   .** <ul>.** <li
db20: 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58   value="97"> TEX
db30: 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  T.** <li value="
db40: 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69  98"> BLOB.** <li
db50: 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d   value="99"> NUM
db60: 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  ERIC.** <li valu
db70: 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52  e="100"> INTEGER
db80: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
db90: 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75  01"> REAL.** </u
dba0: 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  l>.**.** A NULL 
dbb0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
dbc0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
dbd0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
dbe0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
dbf0: 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Cast: {      
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
dc10: 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
dc20: 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f  pOp->p2>=SQLITE_
dc30: 41 46 46 5f 4e 4f 4e 45 20 26 26 20 70 4f 70 2d  AFF_NONE && pOp-
dc40: 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2<=SQLITE_AFF_
dc50: 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61  REAL );.  testca
dc60: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
dc70: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a  ITE_AFF_TEXT );.
dc80: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
dc90: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
dca0: 4e 4f 4e 45 20 29 3b 0a 20 20 74 65 73 74 63 61  NONE );.  testca
dcb0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
dcc0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
dcd0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
dce0: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
dcf0: 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20  FF_INTEGER );.  
dd00: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
dd10: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  2==SQLITE_AFF_RE
dd20: 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  AL );.  pIn1 = &
dd30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dd40: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
dd50: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63  e(p, pIn1);.  rc
dd60: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
dd70: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
dd80: 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20  beMemCast(pIn1, 
dd90: 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e  pOp->p2, encodin
dda0: 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
ddb0: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
ddc0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
ddd0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
dde0: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
ddf0: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
de00: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
de10: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b  sis: if r[P1]<r[
de20: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
de30: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
de40: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
de50: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
de60: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
de70: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
de80: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
de90: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
dea0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
deb0: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
dec0: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
ded0: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
dee0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
def0: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
df00: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
df10: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
df20: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
df30: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
df40: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
df50: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
df60: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
df70: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
df80: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
df90: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
dfa0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
dfb0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
dfc0: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
dfd0: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
dfe0: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
dff0: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
e000: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
e010: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
e020: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
e030: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
e040: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e050: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
e060: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
e070: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
e080: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
e090: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
e0a0: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
e0b0: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
e0c0: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
e0d0: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
e0e0: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
e0f0: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
e100: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
e110: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
e120: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
e130: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
e140: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
e150: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
e160: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
e170: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
e180: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
e190: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
e1a0: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
e1b0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
e1c0: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
e1d0: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
e1e0: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e1f0: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
e200: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
e210: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
e220: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
e230: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
e240: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
e250: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
e260: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
e270: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
e280: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
e290: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
e2a0: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e2b0: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
e2c0: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
e2d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
e2e0: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
e2f0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
e300: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
e310: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
e320: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e330: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
e340: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
e350: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e360: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e370: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e380: 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f  TE_STOREP2 bit o
e390: 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
e3a0: 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20  n do not jump.  
e3b0: 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72  Instead,.** stor
e3c0: 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75  e a boolean resu
e3d0: 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72  lt (either 0, or
e3e0: 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20   1, or NULL) in 
e3f0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
e400: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e410: 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73  _NULLEQ bit is s
e420: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e  et in P5, then N
e430: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
e440: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75  onsidered.** equ
e450: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
e460: 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74  r, provided that
e470: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76   they do not hav
e480: 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61  e their MEM_Clea
e490: 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a  red.** bit set..
e4a0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
e4b0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e4c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e4d0: 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]!=r[P3] got
e4e0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
e4f0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e500: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e510: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e520: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e530: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
e540: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
e550: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
e560: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
e570: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
e580: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e590: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e5a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e5b0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e5c0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e5d0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e5e0: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e5f0: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e600: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e610: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e620: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e630: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e640: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
e650: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
e660: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e670: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
e680: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
e690: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e6a0: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e6b0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e6c0: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e6d0: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e6e0: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e6f0: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e700: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  /./* Opcode: Eq 
e710: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e720: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e730: 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]==r[P3] goto
e740: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e750: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e760: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e770: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e780: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e790: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e7a0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e7b0: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
e7c0: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
e7d0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e7e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e7f0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e800: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e810: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e820: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e830: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e840: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e850: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e860: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e870: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e880: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e890: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e8a0: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
e8b0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e8c0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e8d0: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
e8e0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e8f0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e900: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e910: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e920: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e930: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e940: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e950: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e960: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
e970: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e980: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d  psis: if r[P1]<=
e990: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e9a0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e9b0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e9c0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e9d0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e9e0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e9f0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ea00: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
ea10: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
ea20: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ea30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ea40: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ea50: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ea60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ea70: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ea80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ea90: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
eaa0: 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]>r[P3] goto P2
eab0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
eac0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ead0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
eae0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
eaf0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
eb00: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
eb10: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
eb20: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
eb30: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
eb40: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
eb50: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
eb60: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
eb70: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
eb80: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
eb90: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
eba0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b  is: if r[P1]>=r[
ebb0: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ebc0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ebd0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ebe0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
ebf0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
ec00: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
ec10: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
ec20: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ec30: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ec40: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ec50: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ec60: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ec70: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ec80: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ec90: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
eca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ecb0: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ecc0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ecd0: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
ece0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ecf0: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
ed00: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ed10: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
ed20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ed30: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ed40: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ed50: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ed60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ed70: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ed80: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ed90: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
eda0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
edb0: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
edc0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
edd0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
ede0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
edf0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ee00: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  3 */.  int res; 
ee10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
ee20: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
ee30: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
ee40: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
ee50: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
ee60: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
ee70: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
ee80: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
ee90: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
eea0: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
eeb0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
eec0: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
eed0: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
eee0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
eef0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
ef00: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
ef10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ef20: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
ef30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
ef40: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
ef50: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
ef60: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
ef70: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
ef80: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
ef90: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
efa0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
efb0: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
efc0: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
efd0: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
efe0: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
eff0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
f000: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
f010: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
f020: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
f030: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
f040: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
f050: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
f060: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
f070: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
f080: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f090: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f0a0: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f0b0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f0c0: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f0d0: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f0e0: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f0f0: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f100: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
f110: 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
f120: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f130: 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  LL)==0 );.      
f140: 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  if( (flags1&MEM_
f150: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
f160: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e  && (flags3&MEM_N
f170: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
f180: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c  & (flags3&MEM_Cl
f190: 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20  eared)==0.      
f1a0: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  ){.        res =
f1b0: 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   0;  /* Results 
f1c0: 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  are equal */.   
f1d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f1e0: 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52    res = 1;  /* R
f1f0: 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65  esults are not e
f200: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  qual */.      }.
f210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f220: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
f230: 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
f240: 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
f250: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
f260: 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
f270: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
f280: 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
f290: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f2a0: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
f2b0: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
f2c0: 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
f2d0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
f2e0: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
f2f0: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
f300: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f310: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
f320: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f330: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
f340: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
f350: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
f360: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
f370: 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
f380: 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20  chTaken(2,3);.  
f390: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
f3a0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f3b0: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
f3c0: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
f3d0: 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p2;.        }.  
f3e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
f3f0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
f400: 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
f410: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f420: 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
f430: 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
f440: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
f450: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
f460: 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
f470: 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y>=SQLITE_AFF_NU
f480: 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69  MERIC ){.      i
f490: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f4a0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f4b0: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
f4c0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
f4d0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
f4e0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a  finity(pIn1,0);.
f4f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
f500: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
f510: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
f520: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
f530: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
f540: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
f550: 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20  inity(pIn3,0);. 
f560: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
f570: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
f580: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
f590: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
f5a0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
f5b0: 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 31 2d  tr)==0 && (pIn1-
f5c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f5d0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
f5e0: 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
f5f0: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
f600: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
f610: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f620: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f630: 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
f640: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f650: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
f660: 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
f670: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f680: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
f690: 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
f6a0: 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
f6b0: 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
f6c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
f6d0: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
f6e0: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
f6f0: 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mask);.      }. 
f700: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f710: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
f720: 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e 66 6c  ==0 && (pIn3->fl
f730: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
f740: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
f750: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f760: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
f770: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
f780: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
f790: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
f7a0: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
f7b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
f7c0: 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
f7d0: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
f7e0: 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
f7f0: 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
f800: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
f810: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
f820: 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
f830: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
f840: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
f850: 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
f860: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
f870: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
f880: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
f890: 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
f8a0: 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
f8b0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
f8c0: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f8d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f8e0: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
f8f0: 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n1);.      flags
f900: 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  1 &= ~MEM_Zero;.
f910: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
f920: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
f930: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
f940: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
f950: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
f960: 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e 4d      flags3 &= ~M
f970: 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
f980: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
f990: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
f9a0: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20 3d  o_mem;.    res =
f9b0: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
f9c0: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
f9d0: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
f9e0: 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
f9f0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
fa00: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
fa10: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
fa20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
fa30: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
fa40: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
fa50: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
fa60: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
fa70: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
fa80: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
fa90: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
faa0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
fab0: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
fac0: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
fad0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
fae0: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
faf0: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
fb00: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e  ak;.  }..  /* Un
fb10: 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d  do any changes m
fb20: 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69  ade by applyAffi
fb30: 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e  nity() to the in
fb40: 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a  put registers. *
fb50: 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  /.  assert( (pIn
fb60: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
fb70: 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26  yn) == (flags1 &
fb80: 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70   MEM_Dyn) );.  p
fb90: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In1->flags = fla
fba0: 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28  gs1;.  assert( (
fbb0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
fbc0: 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
fbd0: 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  3 & MEM_Dyn) );.
fbe0: 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
fbf0: 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70  flags3;..  if( p
fc00: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fc10: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
fc20: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
fc30: 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  >p2];.    memAbo
fc40: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
fc50: 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
fc60: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
fc70: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
fc80: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
fc90: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
fca0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
fcb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
fcc0: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
fcd0: 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
fce0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
fcf0: 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
fd00: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a   ){.      goto j
fd10: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
fd20: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
fd30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
fd40: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
fd50: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
fd60: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
fd70: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
fd80: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
fd90: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
fda0: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
fdb0: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
fdc0: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
fdd0: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
fde0: 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
fdf0: 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
fe00: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
fe10: 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
fe20: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
fe30: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
fe40: 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
fe50: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
fe60: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
fe70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
fe80: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
fe90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
fea0: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
feb0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
fec0: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
fed0: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
fee0: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
fef0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
ff00: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ff10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
ff20: 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
ff30: 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
ff40: 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
ff50: 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
ff60: 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
ff70: 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
ff80: 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
ff90: 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
ffa0: 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
ffb0: 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
ffc0: 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
ffd0: 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
ffe0: 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
fff0: 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10000 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10010 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10020 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10030 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10040 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10050 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10060 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10070 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10080 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10090 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
100a0 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
100b0 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
100c0 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
100d0 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
100e0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
100f0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10100 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10110 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10120 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10130 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10140 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10150 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10160 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10170 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10180 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10190 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
101a0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
101b0 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
101c0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
101d0 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
101e0 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
101f0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10200 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10210 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10220 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10230 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10240 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10250 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10260 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10270 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10280 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10290 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
102a0 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
102b0 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
102c0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
102d0 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
102e0 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
102f0 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
10300 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
10310 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
10320 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
10330 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
10340 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
10350 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
10360 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
10370 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
10380 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
10390 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
103a0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
103b0 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
103c0 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
103d0 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
103e0 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
103f0 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
10400 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
10410 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
10420 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
10430 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
10440 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
10450 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
10460 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
10470 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
10480 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
10490 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
104a0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
104b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
104c0 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
104d0 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  1+n<=(p->nMem-p-
104e0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
104f0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
10500 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p2+n<=(p->nMe
10510 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
10520 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
10530 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
10540 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
10550 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
10560 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
10570 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
10580 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
10590 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
105a0 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
105b0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
105c0 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
105d0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
105e0 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
105f0 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
10600 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
10610 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
10620 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
10630 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
10640 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
10650 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
10660 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
10670 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
10680 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
10690 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
106a0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
106b0 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
106c0 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
106d0 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
106e0 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
106f0 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
10700 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
10710 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
10720 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
10730 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
10740 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
10750 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10760 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
10770 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
10780 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
10790 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
107a0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
107b0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
107c0 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
107d0 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
107e0 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
107f0 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
10800 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
10810 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
10820 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
10830 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
10840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10850 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
10860 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
10870 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
10880 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
10890 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
108a0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
108b0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
108c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
108d0 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
108e0 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
108f0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
10900 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
10910 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
10920 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
10930 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10940 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
10950 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
10960 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
10970 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
10980 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
10990 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
109a0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
109b0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
109c0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
109d0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
109e0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
109f0 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
10a00 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
10a10 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
10a20 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
10a30 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
10a40 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
10a50 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
10a60 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
10a70 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
10a80 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
10a90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
10aa0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
10ab0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
10ac0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
10ad0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
10ae0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
10af0 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
10b00 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
10b10 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
10b20 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
10b30 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
10b40 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
10b50 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
10b60 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
10b70 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
10b80 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
10b90 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
10ba0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
10bb0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
10bc0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
10bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10be0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
10bf0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
10c00 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
10c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10c20 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
10c30 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
10c40 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
10c50 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
10c60 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
10c70 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
10c80 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
10c90 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
10ca0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
10cb0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
10cc0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
10cd0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
10ce0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
10cf0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10d00 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
10d10 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
10d20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
10d30 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
10d40 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
10d50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
10d60 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
10d70 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
10d80 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
10d90 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
10da0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10db0 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
10dc0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
10dd0 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
10de0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
10df0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
10e00 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
10e10 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
10e20 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
10e30 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
10e40 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
10e50 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10e60 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
10e70 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
10e80 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
10e90 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
10ea0 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
10eb0 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
10ec0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10ed0 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
10ee0 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
10ef0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
10f00 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
10f10 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10f20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
10f30 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10f40 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
10f50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10f60 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
10f70 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
10f80 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
10f90 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
10fa0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10fb0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
10fc0 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
10fd0 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
10fe0 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
10ff0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
11000 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11010 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
11020 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
11030 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
11040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
11050 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11060 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11070 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
11080 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11090 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
110a0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
110b0 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
110c0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
110d0 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
110e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
110f0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
11100 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11110 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11120 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
11130 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11140 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11150 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
11160 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
11170 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
11180 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
11190 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
111a0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
111b0 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
111c0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
111d0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
111e0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
111f0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11200 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
11210 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
11220 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
11230 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
11240 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
11250 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11260 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
11270 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11280 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11290 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
112a0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
112b0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
112c0 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
112d0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
112e0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
112f0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
11300 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
11310 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
11320 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11330 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
11340 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
11350 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
11360 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
11370 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62  "once" flag numb
11380 65 72 20 50 31 2e 20 49 66 20 69 74 20 69 73 20  er P1. If it is 
11390 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  set, jump to ins
113a0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a  truction P2. .**
113b0 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
113c0 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
113d0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
113e0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
113f0 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  n..** In other w
11400 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64  ords, this opcod
11410 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c  e causes all fol
11420 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75  lowing opcodes u
11430 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20  p through P2.** 
11440 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69  (but not includi
11450 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75  ng P2) to run ju
11460 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62  st once and to b
11470 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62  e skipped on sub
11480 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73  sequent.** times
11490 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f   through the loo
114a0 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e  p..**.** All "on
114b0 63 65 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e  ce" flags are in
114c0 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20  itially cleared 
114d0 77 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61  whenever a prepa
114e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
114f0 20 66 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f   first begins to
11500 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   run..*/.case OP
11510 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
11520 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
11530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11540 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29  1<p->nOnceFlag )
11550 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
11560 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  ken(p->aOnceFlag
11570 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29  [pOp->p1]!=0, 2)
11580 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65  ;.  if( p->aOnce
11590 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b  Flag[pOp->p1] ){
115a0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
115b0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
115c0 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
115d0 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
115e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
115f0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
11600 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
11610 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11620 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11630 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
11640 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
11650 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
11660 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
11670 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
11680 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
11690 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
116a0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
116b0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
116c0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
116d0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
116e0 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
116f0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11700 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11710 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11720 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
11730 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
11740 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20  red false if it 
11750 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
11760 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
11770 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
11780 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
11790 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
117a0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
117b0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
117c0 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117e0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
117f0 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
11800 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
11810 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
11820 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
11830 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11840 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11850 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
11860 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
11870 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
11880 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
11890 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
118a0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
118b0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
118c0 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
118d0 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
118e0 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
118f0 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
11900 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
11910 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
11920 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11930 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
11940 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a   c ){.    goto j
11950 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
11960 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11970 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
11980 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11990 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d  psis:  if r[P1]=
119a0 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
119b0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
119c0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
119d0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
119e0 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
119f0 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
11a00 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11a10 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
11a20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
11a30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11a40 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11a50 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
11a60 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
11a70 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
11a80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11a90 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
11aa0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11ab0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11ac0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
11ad0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11ae0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
11af0 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]!=NULL goto P2
11b00 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11b10 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11b20 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11b30 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
11b40 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
11b50 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
11b60 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
11b70 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
11b80 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11b90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
11ba0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
11bb0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
11bc0 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20  _Null)==0, 2);. 
11bd0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11be0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
11bf0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
11c00 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
11c10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11c20 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
11c30 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
11c40 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58  opsis:  r[P3]=PX
11c50 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11c60 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
11c70 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
11c80 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
11c90 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
11ca0 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
11cb0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
11cc0 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
11cd0 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
11ce0 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
11cf0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
11d00 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
11d10 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
11d20 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
11d30 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
11d40 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
11d50 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
11d60 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
11d70 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
11d80 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
11d90 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
11da0 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
11db0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
11dc0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
11dd0 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66  olumn contains f
11de0 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65  ewer than P2 fie
11df0 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63  lds, then extrac
11e00 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a  t a NULL.  Or,.*
11e10 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75  * if the P4 argu
11e20 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d  ment is a P4_MEM
11e30 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   use the value o
11e40 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
11e50 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  t as.** the resu
11e60 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  lt..**.** If the
11e70 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43   OPFLAG_CLEARCAC
11e80 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  HE bit is set on
11e90 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20   P5 and P1 is a 
11ea0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
11eb0 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  sor,.** then the
11ec0 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75   cache of the cu
11ed0 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72  rsor is reset pr
11ee0 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e  ior to extractin
11ef0 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  g the column..**
11f00 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f   The first OP_Co
11f10 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70  lumn against a p
11f20 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65  seudo-table afte
11f30 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  r the value of t
11f40 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65  he content.** re
11f50 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67  gister has chang
11f60 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74  ed should have t
11f70 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  his bit set..**.
11f80 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
11f90 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
11fa0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
11fb0 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20  bits are set on 
11fc0 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72  P5 when.** the r
11fd0 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74  esult is guarant
11fe0 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75  eed to only be u
11ff0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
12000 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28  ent of a length(
12010 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29  ).** or typeof()
12020 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65   function, respe
12030 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f  ctively.  The lo
12040 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62  ading of large b
12050 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73  lobs can be.** s
12060 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74  kipped for lengt
12070 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74  h() and all cont
12080 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20  ent loading can 
12090 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74  be skipped for t
120a0 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65  ypeof()..*/.case
120b0 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
120c0 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
120d0 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  4; /* Number of 
120e0 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
120f0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ord */.  int p2;
12100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
12110 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
12120 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
12130 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
12140 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
12150 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
12160 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
12170 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
12180 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
12190 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
121a0 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
121b0 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
121c0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
121d0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
121e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
121f0 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
12200 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
12210 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
12220 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
12230 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
12240 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
12250 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
12260 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
12270 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
12280 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
12290 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
122a0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
122b0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
122c0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
122d0 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
122e0 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
122f0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
12300 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
12310 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
12320 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
12330 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
12340 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
12350 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
12360 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
12370 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
12380 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
12390 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
123a0 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
123b0 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20    u32 szField;  
123c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
123d0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63  f bytes in the c
123e0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c  ontent of a fiel
123f0 64 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c  d */.  u32 avail
12400 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
12410 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
12420 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
12430 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20  /.  u32 t;      
12440 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65         /* A type
12450 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72   code from the r
12460 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a  ecord header */.
12470 20 20 75 31 36 20 66 78 3b 20 20 20 20 20 20 20    u16 fx;       
12480 20 20 20 20 20 2f 2a 20 70 44 65 73 74 2d 3e 66       /* pDest->f
12490 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lags value */.  
124a0 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20  Mem *pReg;      
124b0 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c     /* PseudoTabl
124c0 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
124d0 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d   */..  p2 = pOp-
124e0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
124f0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
12500 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
12510 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
12520 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
12530 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
12540 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
12550 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
12560 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
12570 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
12580 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
12590 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
125a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
125b0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
125c0 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66  >nField );.  aOf
125d0 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
125e0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
125f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12600 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
12610 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
12620 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0 ); /* OP_Colum
12630 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f  n never called o
12640 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  n virtual table 
12650 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  */.#endif.  pCrs
12660 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
12670 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
12680 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64  !=0 || pC->pseud
12690 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f  oTableReg>0 ); /
126a0 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20  * pCrsr NULL on 
126b0 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
126c0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
126d0 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
126e0 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  w );          /*
126f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20   pC->nullRow on 
12700 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
12710 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
12720 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
12730 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
12740 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
12750 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
12760 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
12770 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
12780 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
12790 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  r;.  if( pC->cac
127a0 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
127b0 68 65 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28  heCtr ){.    if(
127c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
127d0 20 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d        if( pCrsr=
127e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
127f0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
12800 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20  TableReg>0 );.  
12810 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d        pReg = &aM
12820 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  em[pC->pseudoTab
12830 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20  leReg];.        
12840 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c  assert( pReg->fl
12850 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
12860 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
12870 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
12880 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  g) );.        pC
12890 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
128a0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69  pC->szRow = avai
128b0 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20  l = pReg->n;.   
128c0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
128d0 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20  (u8*)pReg->z;.  
128e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
128f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12900 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
12910 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
12920 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12930 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
12940 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12950 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28  rsr );.      if(
12960 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
12970 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
12980 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
12990 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
129a0 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56  sr) );.        V
129b0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
129c0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
129d0 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
129e0 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20  dSize64);.      
129f0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12a00 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72  LITE_OK ); /* Tr
12a10 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
12a20 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
12a30 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20  l above */.     
12a40 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
12a50 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
12a60 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
12a70 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
12a80 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61  he.        ** pa
12a90 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69  yload size, so i
12aa0 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
12ab0 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  for payloadSize6
12ac0 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20  4 to be.        
12ad0 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33  ** larger than 3
12ae0 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20  2 bits. */.     
12af0 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c     assert( (payl
12b00 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49  oadSize64 & SQLI
12b10 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36  TE_MAX_U32)==(u6
12b20 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  4)payloadSize64 
12b30 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  );.        pC->a
12b40 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
12b50 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72  eeKeyFetch(pCrsr
12b60 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
12b70 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
12b80 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61  ze = (u32)payloa
12b90 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d  dSize64;.      }
12ba0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
12bb0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
12bc0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
12bd0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
12be0 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
12bf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
12c00 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43  aSize(pCrsr, &pC
12c10 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a  ->payloadSize);.
12c20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12c30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12c40 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
12c50 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
12c60 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
12c70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
12c80 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
12c90 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
12ca0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61  .      assert( a
12cb0 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20  vail<=65536 );  
12cc0 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20  /* Maximum page 
12cd0 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f  size is 64KiB */
12ce0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
12cf0 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
12d00 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
12d10 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
12d20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
12d30 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12d40 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12d50 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d  = avail;.      }
12d60 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
12d70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
12d80 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
12d90 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
12da0 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  ] ){.        got
12db0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20  o too_big;.     
12dc0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
12dd0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
12de0 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
12df0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
12e00 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
12e10 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a  >aRow, offset);.
12e20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
12e30 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66  ed = 0;.    aOff
12e40 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b  set[0] = offset;
12e50 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ..    /* Make su
12e60 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
12e70 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
12e80 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
12e90 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a  ze header..    *
12ea0 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
12eb0 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
12ec0 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
12ed0 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  tion..    **.   
12ee0 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
12ef0 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
12f00 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
12f10 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
12f20 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70   byte.    ** typ
12f30 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
12f40 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
12f50 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
12f60 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
12f70 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
12f80 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
12f90 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
12fa0 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
12fb0 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33   from a.    ** 3
12fc0 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
12fd0 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
12fe0 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
12ff0 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
13000 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65     ** extra byte
13010 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72  s for the header
13020 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20   length itself. 
13030 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39   32768*3 + 3 = 9
13040 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  8307..    */.   
13050 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38   if( offset > 98
13060 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20  307 || offset > 
13070 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
13080 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
13090 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
130a0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
130b0 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
130c0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 61 76     }..    if( av
130d0 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
130e0 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
130f0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
13100 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
13110 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
13120 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
13130 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
13140 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
13150 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
13160 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
13170 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
13180 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
13190 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
131a0 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
131b0 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
131c0 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
131d0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
131e0 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
131f0 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
13200 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
13210 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
13220 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f  The following go
13230 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  to is an optimiz
13240 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62  ation.  It can b
13250 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20  e omitted and.  
13260 20 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20    ** everything 
13270 77 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e  will still work.
13280 20 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20    But OP_Column 
13290 69 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61  is measurably fa
132a0 73 74 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73  ster.    ** by s
132b0 6b 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73  kipping the subs
132c0 65 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e  equent condition
132d0 61 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77  al, which is alw
132e0 61 79 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f  ays true..    */
132f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
13300 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
13310 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  );         /* Co
13320 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65  nditional skippe
13330 64 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  d */.    goto op
13340 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
13350 64 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d  der;.  }..  /* M
13360 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73  ake sure at leas
13370 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31  t the first p2+1
13380 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20   entries of the 
13390 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e  header have been
133a0 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64  .  ** parsed and
133b0 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69   valid informati
133c0 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74  on is in aOffset
133d0 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  [] and pC->aType
133e0 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  []..  */.  if( p
133f0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
13400 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  2 ){.    /* If t
13410 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61  here is more hea
13420 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  der available fo
13430 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65  r parsing in the
13440 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20   record, try.   
13450 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61   ** to extract a
13460 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
13470 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20   up through the 
13480 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20  p2+1-th field . 
13490 20 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c     */.    op_col
134a0 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a  umn_read_header:
134b0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
134c0 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
134d0 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
134e0 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
134f0 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
13500 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
13510 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
13520 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
13530 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
13540 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
13550 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
13560 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
13570 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
13580 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
13590 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d  r, 0, aOffset[0]
135a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54          !pC->isT
135d0 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  able, &sMem);.  
135e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
135f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
13600 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13610 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
13620 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61     }.        zDa
13630 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a  ta = (u8*)sMem.z
13640 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13650 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70         zData = p
13660 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d  C->aRow;.      }
13670 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c  .  .      /* Fil
13680 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69  l in pC->aType[i
13690 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  ] and aOffset[i]
136a0 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20   values through 
136b0 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e  the p2-th field.
136c0 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43   */.      i = pC
136d0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20  ->nHdrParsed;.  
136e0 20 20 20 20 6f 66 66 73 65 74 20 3d 20 61 4f 66      offset = aOf
136f0 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
13700 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
13710 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
13720 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
13730 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
13740 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
13750 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
13760 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64  ndHdr );.      d
13770 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  o{.        if( z
13780 48 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20  Hdr[0]<0x80 ){. 
13790 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a 48 64           t = zHd
137a0 72 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  r[0];.          
137b0 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
137c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
137d0 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   zHdr += sqlite3
137e0 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  GetVarint32(zHdr
137f0 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  , &t);.        }
13800 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
13810 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
13820 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
13830 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13840 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
13850 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69    offset += szFi
13860 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28  eld;.        if(
13870 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20   offset<szField 
13880 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f  ){  /* True if o
13890 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20  ffset overflows 
138a0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  */.          zHd
138b0 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b  r = &zEndHdr[1];
138c0 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49    /* Forces SQLI
138d0 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72  TE_CORRUPT retur
138e0 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20  n below */.     
138f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
13900 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 2b      }.        i+
13910 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  +;.        aOffs
13920 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[i] = offset;.
13930 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
13940 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
13950 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  Hdr );.      pC-
13960 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b  >nHdrParsed = i;
13970 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  .      pC->iHdrO
13980 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48  ffset = (u32)(zH
13990 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20  dr - zData);.   
139a0 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
139b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
139c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
139d0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
139e0 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
139f0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
13a00 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 54   }.  .      /* T
13a10 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72  he record is cor
13a20 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74  rupt if any of t
13a30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
13a40 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20   true:.      ** 
13a50 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66  (1) the bytes of
13a60 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65   the header exte
13a70 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c  nd past the decl
13a80 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65  ared header size
13a90 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
13aa0 20 20 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72     (zHdr>zEndHdr
13ab0 29 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  ).      ** (2) t
13ac0 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
13ad0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
13ae0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
13af0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  sed.      **    
13b00 20 20 20 20 20 20 28 7a 48 64 72 3d 3d 7a 45 6e        (zHdr==zEn
13b10 64 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d  dHdr && offset!=
13b20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13b30 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68  .      ** (3) th
13b40 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74  e end of the dat
13b50 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64  a extends beyond
13b60 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
13b70 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2a  record..      **
13b80 20 20 20 20 20 20 20 20 20 20 28 6f 66 66 73 65            (offse
13b90 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  t > pC->payloadS
13ba0 69 7a 65 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ize).      */.  
13bb0 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
13bc0 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
13bd0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
13be0 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  t!=pC->payloadSi
13bf0 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ze)).       || (
13c00 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
13c10 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
13c20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
13c30 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
13c40 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
13c50 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13c60 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
13c70 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65  ..    /* If afte
13c80 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72  r trying to extr
13c90 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20  act new entries 
13ca0 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c  from the header,
13cb0 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20   nHdrParsed is. 
13cc0 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20     ** still not 
13cd0 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d  up to p2, that m
13ce0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65  eans that the re
13cf0 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74  cord has fewer t
13d00 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f  han p2.    ** co
13d10 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72  lumns.  So the r
13d20 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69  esult will be ei
13d30 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ther the default
13d40 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c   value or a NULL
13d50 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
13d60 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
13d70 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =p2 ){.      if(
13d80 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
13d90 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  _MEM ){.        
13da0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
13db0 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
13dc0 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
13dd0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
13de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13df0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13e00 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
13e10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
13e20 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13e30 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13e40 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
13e50 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
13e60 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
13e70 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
13e80 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
13e90 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
13ea0 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
13eb0 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  1], and pC->aTyp
13ec0 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61  e[p2] are.  ** a
13ed0 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20  ll valid..  */. 
13ee0 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13ef0 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20  nHdrParsed );.  
13f00 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13f10 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72  TE_OK );.  asser
13f20 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
13f30 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
13f40 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28  (pDest) );.  if(
13f50 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
13f60 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65 33  pDest) ) sqlite3
13f70 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
13f80 44 65 73 74 29 3b 0a 20 20 74 20 3d 20 70 43 2d  Dest);.  t = pC-
13f90 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 69 66  >aType[p2];.  if
13fa0 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
13fb0 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
13fc0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
13fd0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
13fe0 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
13ff0 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
14000 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
14010 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
14020 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
14030 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
14040 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73 71  w page */.    sq
14050 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
14060 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66  et(pC->aRow+aOff
14070 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65 73  set[p2], t, pDes
14080 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
14090 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   /* This branch 
140a0 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65  happens only whe
140b0 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20  n content is on 
140c0 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a  overflow pages *
140d0 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d  /.    if( ((pOp-
140e0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45  >p5 & (OPFLAG_LE
140f0 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54  NGTHARG|OPFLAG_T
14100 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20  YPEOFARG))!=0.  
14110 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d          && ((t>=
14120 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20  12 && (t&1)==0) 
14130 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  || (pOp->p5 & OP
14140 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21  FLAG_TYPEOFARG)!
14150 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65  =0)).     || (le
14160 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
14170 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29  erialTypeLen(t))
14180 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ==0.    ){.     
14190 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69   /* Content is i
141a0 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20  rrelevant for.  
141b0 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65      **    1. the
141c0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
141d0 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  on,.      **    
141e0 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  2. the length(X)
141f0 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
14200 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20  s a blob, and.  
14210 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20      **    3. if 
14220 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67  the content leng
14230 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20  th is zero..    
14240 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74    ** So we might
14250 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67   as well use bog
14260 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
14270 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20  r than reading. 
14280 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20       ** content 
14290 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c  from disk.  NULL
142a0 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 74   will work for t
142b0 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74 72  he value for str
142c0 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61 6e  ings.      ** an
142d0 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61 74  d blobs and what
142e0 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70  ever is in the p
142f0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72  ayloadSize64 var
14300 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77  iable.      ** w
14310 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
14320 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f  rything else. */
14330 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
14340 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d 31  beSerialGet(t<=1
14350 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61  3 ? (u8*)&payloa
14360 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c 20  dSize64 : 0, t, 
14370 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
14380 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
14390 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
143a0 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
143b0 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21  fset[p2], len, !
143c0 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20  pC->isTable,.   
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66  pDest);.      if
14400 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
14410 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14420 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
14430 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
14440 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14450 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70  Get((const u8*)p
14460 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73  Dest->z, t, pDes
14470 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  t);.      pDest-
14480 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45  >flags &= ~MEM_E
14490 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  phem;.    }.  }.
144a0 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
144b0 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c  ncoding;..op_col
144c0 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49 66  umn_out:.  /* If
144d0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
144e0 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72 61  e is an ephemera
144f0 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68 65  l string, go ahe
14500 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a 20  ad and persist. 
14510 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67 20   ** that string 
14520 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72 73  in case the curs
14530 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65 20  or moves before 
14540 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
14550 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20 20   is.  ** used.  
14560 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
14570 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75 69  de does the equi
14580 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68 65  valent of Deephe
14590 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a 20  meralize().  ** 
145a0 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73 74  but does it fast
145b0 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70 44  er. */.  if( (pD
145c0 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
145d0 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70 44  _Ephem)!=0 && pD
145e0 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66 78  est->z ){.    fx
145f0 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   = pDest->flags 
14600 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
14610 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72 74  lob);.    assert
14620 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20 7a  ( fx!=0 );.    z
14630 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75 38  Data = (const u8
14640 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20 20  *)pDest->z;.    
14650 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a  len = pDest->n;.
14660 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
14670 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
14680 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e 2b  size(pDest, len+
14690 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
146a0 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65  ;.    memcpy(pDe
146b0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
146c0 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  n);.    pDest->z
146d0 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 70  [len] = 0;.    p
146e0 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d  Dest->z[len+1] =
146f0 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66   0;.    pDest->f
14700 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54 65  lags = fx|MEM_Te
14710 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d  rm;.  }.op_colum
14720 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54  n_error:.  UPDAT
14730 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
14740 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
14750 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
14760 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
14770 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14780 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
14790 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
147a0 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
147b0 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
147c0 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
147d0 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
147e0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
147f0 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
14800 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
14810 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14820 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
14830 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
14840 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
14850 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
14860 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
14870 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
14880 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
14890 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
148a0 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
148b0 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
148c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
148d0 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
148e0 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
148f0 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
14900 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
14910 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
14920 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
14930 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
14940 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
14950 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
14960 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
14970 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
14980 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
14990 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
149a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
149b0 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
149c0 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
149d0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
149e0 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
149f0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
14a00 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
14a10 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14a20 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
14a30 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
14a40 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
14a50 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
14a60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
14a70 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
14a80 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
14a90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
14aa0 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
14ab0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
14ac0 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
14ad0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
14ae0 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
14af0 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
14b00 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
14b10 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
14b20 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
14b30 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
14b40 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
14b50 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
14b60 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
14b70 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
14b80 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
14b90 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14ba0 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
14bb0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14bc0 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14bd0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14be0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14bf0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14c00 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
14c10 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
14c20 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
14c30 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
14c40 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
14c50 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
14c60 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
14c70 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
14c80 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
14c90 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
14ca0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
14cb0 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
14cc0 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
14cd0 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
14ce0 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
14cf0 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
14d00 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
14d10 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
14d20 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
14d30 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14d40 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
14d50 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
14d60 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
14d70 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
14d80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14d90 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
14da0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14dc0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14dd0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14de0 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14e00 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
14e10 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
14e20 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65  ord */.  i64 nZe
14e30 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
14e40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
14e50 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
14e60 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14e70 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
14e80 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14e90 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14ea0 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
14eb0 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
14ec0 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
14ed0 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
14ee0 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
14ef0 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
14f00 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
14f10 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
14f20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
14f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
14f40 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
14f50 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14f60 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
14f70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14f80 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
14f90 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
14fa0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
14fb0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14fc0 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
14fd0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14fe0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
14ff0 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
15000 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
15010 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
15020 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
15030 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
15040 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
15050 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
15060 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
15070 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15080 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15090 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69  ] content */.  i
150a0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
150b0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
150c0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
150d0 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
150e0 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
150f0 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
15100 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
15110 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
15120 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
15130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15170 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
15180 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
15190 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
151a0 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
151b0 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
151c0 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
151d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15210 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
15220 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
15230 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
15240 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
15250 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
15260 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
15270 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
15280 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
15290 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
152a0 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
152b0 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
152c0 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
152d0 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
152e0 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
152f0 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
15300 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
15310 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
15320 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
15330 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
15340 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
15350 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
15360 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
15370 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
15380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15390 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
153a0 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
153b0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
153c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
153d0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
153e0 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
153f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15400 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
15410 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
15420 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
15430 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
15440 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
15450 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
15460 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
15470 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
15480 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
15490 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
154a0 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  r)+1 );.  pData0
154b0 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
154c0 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
154d0 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
154e0 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
154f0 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
15500 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
15510 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
15520 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
15530 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
15540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15550 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
15560 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
15570 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
15580 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
15590 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
155a0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
155b0 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72    /* Apply the r
155c0 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74  equested affinit
155d0 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a  y to all inputs.
155e0 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
155f0 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
15600 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
15610 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44  ){.    pRec = pD
15620 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20  ata0;.    do{.  
15630 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
15640 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66  y(pRec++, *(zAff
15650 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
15660 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ng);.      asser
15670 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
15680 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
15690 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
156a0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
156b0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  .  }..  /* Loop 
156c0 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
156d0 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
156e0 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
156f0 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
15700 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
15710 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
15720 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
15730 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20  rd..  */.  pRec 
15740 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20  = pLast;.  do{. 
15750 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15760 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
15770 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
15780 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
15790 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
157a0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
157b0 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
157c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
157d0 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
157e0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
157f0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
15800 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
15810 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
15820 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
15830 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
15840 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pRec);.      }el
15850 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
15860 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
15870 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
15880 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
15890 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
158a0 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
158b0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
158c0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
158d0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
158e0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
158f0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
15900 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
15910 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
15920 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
15930 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
15940 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
15950 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  a0 );..  /* EVID
15960 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
15970 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
15980 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
15990 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
159a0 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
159b0 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
159c0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
159d0 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
159e0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
159f0 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
15a00 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
15a10 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
15a20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
15a30 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
15a40 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
15a50 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
15a60 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
15a70 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
15a80 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
15a90 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
15aa0 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
15ab0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
15ac0 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
15ad0 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
15ae0 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
15af0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
15b00 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
15b10 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
15b20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
15b30 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15b40 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
15b50 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
15b60 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
15b70 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
15b80 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
15b90 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
15ba0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
15bb0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
15bc0 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
15bd0 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
15be0 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
15bf0 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
15c00 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
15c10 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
15c20 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
15c30 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
15c40 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
15c50 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
15c60 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
15c70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
15c80 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
15c90 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
15ca0 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c  esize() could cl
15cb0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
15cc0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
15cd0 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
15ce0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
15cf0 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
15d00 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b  , (int)nByte) ){
15d10 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
15d20 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f  ;.  }.  zNewReco
15d30 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  rd = (u8 *)pOut-
15d40 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20  >z;..  /* Write 
15d50 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
15d60 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  i = putVarint32(
15d70 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72  zNewRecord, nHdr
15d80 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20  );.  j = nHdr;. 
15d90 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
15da0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63  =pLast );.  pRec
15db0 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b   = pData0;.  do{
15dc0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
15dd0 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a   = pRec->uTemp;.
15de0 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
15df0 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36  OF: R-06529-4736
15e00 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  2 Following the 
15e10 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20  size varint are 
15e20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20  one or more.    
15e30 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  ** additional va
15e40 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
15e50 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20  olumn. */.    i 
15e60 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
15e70 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
15e80 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
15e90 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61          /* seria
15ea0 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a  l type */.    /*
15eb0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
15ec0 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20  64536-51728 The 
15ed0 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20  values for each 
15ee0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
15ef0 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65  cord.    ** imme
15f00 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
15f10 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
15f20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    j += sqlite3Vd
15f30 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
15f40 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63  wRecord[j], pRec
15f50 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
15f60 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  /* content */.  
15f70 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
15f80 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73  <=pLast );.  ass
15f90 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a  ert( i==nHdr );.
15fa0 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79    assert( j==nBy
15fb0 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
15fc0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
15fd0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
15fe0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
15ff0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
16000 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
16010 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
16020 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
16030 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
16040 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
16050 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
16060 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
16070 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
16080 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
16090 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
160a0 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
160b0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
160c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
160d0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
160e0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
160f0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
16100 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
16110 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
16120 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
16130 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
16140 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
16150 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
16160 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
16170 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
16180 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
16190 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
161a0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
161b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
161c0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
161d0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
161e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
161f0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
16200 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
16210 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
16220 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16230 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
16240 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
16250 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
16260 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
16270 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
16280 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
16290 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
162a0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
162b0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74  &nEntry);.  pOut
162c0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
162d0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
162e0 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
162f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
16300 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
16310 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
16320 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
16330 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
16340 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
16350 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
16360 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
16370 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
16380 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
16390 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
163a0 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
163b0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
163c0 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
163d0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
163e0 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
163f0 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
16400 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
16410 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
16420 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
16450 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
16460 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
16490 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
164a0 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
164b0 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
164c0 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
164d0 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
164e0 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
164f0 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
16500 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
16510 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
16520 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
16530 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
16540 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
16550 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
16560 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
16570 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
16580 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
16590 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
165a0 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
165b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
165c0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
165d0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
165e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
165f0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
16600 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
16610 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
16620 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
16630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
16640 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
16650 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16660 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
16670 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
16680 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
16690 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
166a0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
166b0 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
166c0 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
166d0 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
166e0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
166f0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
16700 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
16710 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
16720 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
16730 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
16740 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
16750 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
16760 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
16770 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
16780 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16790 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
167a0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
167b0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
167c0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
167d0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
167e0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
167f0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16800 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16810 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
16820 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
16830 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
16840 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
16850 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
16860 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
16870 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
16880 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
16890 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
168a0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
168b0 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
168c0 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
168d0 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
168e0 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
168f0 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
16900 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16910 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
16920 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
16930 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
16940 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
16950 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
16960 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
16970 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
16980 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
16990 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
169a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
169b0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
169c0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
169d0 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
16a00 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
16a10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
16a20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
16a30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
16a40 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
16a50 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
16a60 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
16a70 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
16a80 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
16a90 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
16aa0 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
16ab0 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
16ac0 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
16ad0 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
16ae0 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
16af0 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
16b00 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
16b10 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
16b20 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
16b30 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
16b40 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
16b50 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
16b60 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
16b70 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
16b80 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
16b90 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
16ba0 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
16bb0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
16bc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16bd0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
16be0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16bf0 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
16c00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16c10 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
16c20 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
16c30 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  }.    .        /
16c40 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
16c50 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
16c60 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16c70 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
16c80 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
16c90 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16ca0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16cb0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
16cc0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16cd0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
16ce0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
16cf0 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
16d00 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16d10 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16d20 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
16d30 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
16d40 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
16d50 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
16d60 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
16d70 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
16d80 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
16d90 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
16da0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
16db0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
16dc0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
16dd0 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
16de0 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
16df0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
16e00 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
16e10 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
16e20 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
16e30 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
16e40 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16e50 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
16e60 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
16e70 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
16e80 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
16e90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
16ea0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16eb0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
16ec0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
16ed0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
16ee0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
16ef0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
16f00 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16f10 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
16f20 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16f30 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
16f40 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
16f50 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16f60 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
16f70 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
16f80 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
16f90 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
16fa0 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
16fb0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16fc0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
16fd0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65        "cannot re
16fe0 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
16ff0 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
17000 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20   in progress".  
17010 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
17020 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17030 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
17040 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
17050 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
17060 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17070 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
17080 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
17090 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
170a0 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
170b0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
170c0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
170d0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
170e0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
170f0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
17100 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
17110 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
17120 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17130 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17140 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
17150 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
17160 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17170 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17180 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17190 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
171a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
171b0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
171c0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
171d0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
171e0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
171f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
17200 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
17210 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
17220 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
17230 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
17240 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17250 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17260 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17270 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17280 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17290 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
172a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
172b0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
172c0 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
172d0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
172e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
172f0 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
17300 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
17310 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
17320 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17330 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17340 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17350 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17360 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
17370 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
17380 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
17390 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
173a0 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
173b0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
173c0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
173d0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
173e0 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
173f0 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
17400 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
17440 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
17480 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
17490 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
174a0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
174b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
174c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
174d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
174e0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
174f0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
17500 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
17510 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17520 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17530 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17540 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
17550 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
17560 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17570 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
17580 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17590 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
175a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
175b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
175c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
175d0 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
175e0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
175f0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17600 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17610 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
17620 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
17630 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
17640 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17650 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
17660 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
17670 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
17680 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17690 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
176a0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
176b0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
176c0 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
176d0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
176e0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
176f0 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
17700 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
17710 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
17720 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
17730 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
17740 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
17750 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
17760 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
17770 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
17780 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
17790 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
177a0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
177b0 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
177c0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
177d0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
177e0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
177f0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
17800 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
17810 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
17820 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
17830 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
17840 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
17850 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
17860 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
17870 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
17880 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
17890 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
178a0 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
178b0 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
178c0 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
178d0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
178e0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
178f0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17900 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
17910 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
17920 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
17930 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
17940 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
17950 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17960 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
17970 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
17980 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
17990 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
179a0 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
179b0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
179c0 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
179d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
179e0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
179f0 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
17a00 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
17a10 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
17a20 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
17a30 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
17a40 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
17a50 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
17a60 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
17a70 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
17a80 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
17a90 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17aa0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
17ab0 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
17ac0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
17ad0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17ae0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
17af0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
17b00 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
17b10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17b20 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
17b30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
17b40 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
17b50 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
17b60 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
17b70 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
17b80 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
17b90 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
17ba0 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
17bb0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
17bc0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
17bd0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
17be0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
17bf0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
17c00 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
17c10 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
17c20 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17c30 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
17c40 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
17c50 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
17c60 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
17c70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
17c80 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
17c90 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
17ca0 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
17cb0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
17cc0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
17cd0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
17ce0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
17cf0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
17d00 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
17d10 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
17d20 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
17d30 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
17d40 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
17d50 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17d60 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
17d70 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
17d80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
17d90 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
17da0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
17db0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
17dc0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
17dd0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
17de0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
17df0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
17e00 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17e10 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28   );..#if 0.  if(
17e20 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f   turnOnAC && iRo
17e30 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56  llback && db->nV
17e40 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20  dbeActive>1 ){. 
17e50 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17e60 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17e70 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ents a ROLLBACK 
17e80 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
17e90 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72  e.    ** still r
17ea0 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72  unning, and a tr
17eb0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17ec0 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ive, return an e
17ed0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a  rror indicating.
17ee0 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
17ef0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
17f00 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
17f10 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
17f20 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17f30 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17f40 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72  nnot rollback tr
17f50 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
17f60 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
17f70 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
17f80 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
17f90 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
17fa0 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  se.#endif.  if( 
17fb0 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
17fc0 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56  llback && db->nV
17fd0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
17fe0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
17ff0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
18000 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
18010 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
18020 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
18030 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
18040 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
18050 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
18060 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
18070 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
18080 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
18090 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
180a0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
180b0 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
180c0 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
180d0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
180e0 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
180f0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
18100 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
18110 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
18120 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
18130 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
18140 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
18150 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18160 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
18170 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
18180 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
18190 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
181a0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
181b0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
181c0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
181d0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
181e0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
181f0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
18200 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
18210 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
18220 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
18230 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18240 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  t;.      if( sql
18250 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
18260 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
18270 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
18280 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18290 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
182a0 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
182b0 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
182c0 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
182d0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
182e0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
182f0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18300 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
18310 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18320 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
18330 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
18340 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
18350 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
18360 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
18370 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
18380 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
18390 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
183a0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
183b0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
183c0 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
183d0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
183e0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
183f0 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
18400 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
18410 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
18420 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
18430 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
18440 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
18450 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
18460 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
18470 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
18480 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
18490 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
184a0 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
184b0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
184c0 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
184d0 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
184e0 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
184f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18500 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
18510 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
18520 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
18530 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
18540 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
18550 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
18560 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
18570 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
18580 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
18590 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
185a0 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
185b0 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
185c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
185d0 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
185e0 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
185f0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18600 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
18610 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
18620 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
18630 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
18640 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
18650 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18660 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
18670 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
18680 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
18690 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
186a0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
186b0 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
186c0 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
186d0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
186e0 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
186f0 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
18700 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
18710 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
18720 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
18730 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
18740 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
18750 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
18760 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
18770 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
18780 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
18790 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
187a0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
187b0 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
187c0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
187d0 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
187e0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
187f0 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
18800 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
18810 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
18820 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18830 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
18840 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
18850 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
18860 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
18870 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
18880 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
18890 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
188a0 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
188b0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
188c0 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
188d0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
188e0 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
188f0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
18900 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
18910 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
18920 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
18930 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
18940 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
18950 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
18960 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
18970 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
18980 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
18990 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
189a0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
189b0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
189c0 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
189d0 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
189e0 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
189f0 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
18a00 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
18a10 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
18a20 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
18a30 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
18a40 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
18a50 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
18a60 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
18a70 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
18a80 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
18a90 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
18aa0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
18ab0 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
18ac0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
18ad0 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
18ae0 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
18af0 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
18b00 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
18b10 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
18b20 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
18b30 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
18b40 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
18b50 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18b60 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
18b70 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
18b80 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
18b90 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
18ba0 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
18bb0 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
18bc0 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
18bd0 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
18be0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18bf0 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
18c00 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
18c10 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
18c20 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
18c30 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
18c40 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
18c50 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
18c60 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
18c70 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
18c80 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65  nt iGen;..  asse
18c90 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
18ca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18cb0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
18cc0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
18cd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18ce0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
18cf0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
18d00 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
18d10 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
18d20 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
18d30 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
18d40 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
18d50 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
18d60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
18d70 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
18d80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18d90 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
18da0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18db0 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
18dc0 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
18dd0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
18de0 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
18df0 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
18e00 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18e10 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
18e20 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
18e30 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
18e40 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
18e50 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18e60 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
18e70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18e80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
18e90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18ea0 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
18eb0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
18ec0 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
18ed0 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
18ee0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
18ef0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
18f00 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
18f10 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
18f20 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
18f30 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
18f40 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
18f50 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
18f60 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
18f70 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
18f80 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
18f90 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
18fa0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
18fb0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
18fc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
18fd0 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
18fe0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
18ff0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
19000 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
19010 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
19020 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
19030 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
19040 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19050 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19060 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
19070 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
19080 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
19090 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
190a0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
190b0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
190c0 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
190d0 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
190e0 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
190f0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
19100 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
19110 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
19120 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
19130 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
19140 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
19150 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
19160 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
19170 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
19180 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
19190 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
191a0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
191b0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
191c0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61      }..    /* Ga
191d0 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20  ther the schema 
191e0 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
191f0 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20  or checking:.   
19200 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
19210 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31  ON-OF: R-32195-1
19220 39 34 36 35 20 54 68 65 20 73 63 68 65 6d 61 20  9465 The schema 
19230 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
19240 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a  by SQLite.    **
19250 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
19260 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
19270 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
19280 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
19290 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 73   of the.    ** s
192a0 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20  chema used when 
192b0 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51  compiling the SQ
192c0 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20  L query matches 
192d0 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  the schema of th
192e0 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73  e.    ** databas
192f0 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20  e against which 
19300 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
19310 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65  ry is actually e
19320 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a  xecuted..    */.
19330 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
19340 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
19350 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
19360 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
19370 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
19380 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
19390 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
193a0 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
193b0 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
193c0 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   0;.  }.  assert
193d0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
193e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
193f0 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
19400 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61  Op->p5 && (iMeta
19410 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65  !=pOp->p3 || iGe
19420 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b  n!=pOp->p4.i) ){
19430 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
19440 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
19450 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
19460 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
19470 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
19480 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
19490 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
194a0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
194b0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
194c0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
194d0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
194e0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
194f0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
19500 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
19510 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
19520 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
19530 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
19540 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
19550 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
19560 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
19570 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
19580 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
19590 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
195a0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
195b0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
195c0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
195d0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
195e0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
195f0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
19600 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
19610 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
19620 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
19630 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
19640 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
19650 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
19660 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
19670 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
19680 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
19690 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
196a0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
196b0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
196c0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
196d0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
196e0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
196f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
19700 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
19710 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
19720 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
19730 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
19740 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
19750 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
19760 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
19770 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
19780 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19790 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
197a0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
197b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
197c0 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
197d0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
197e0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
197f0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
19800 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
19810 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19820 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
19830 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19840 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
19850 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
19860 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
19870 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
19880 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
19890 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
198a0 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
198b0 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
198c0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
198d0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
198e0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
198f0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
19900 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
19910 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
19920 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19930 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
19940 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
19950 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
19960 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
19970 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
19980 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
19990 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
199a0 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
199b0 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
199c0 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
199d0 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
199e0 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
199f0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
19a00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
19a10 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
19a20 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
19a30 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
19a40 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
19a50 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
19a60 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
19a70 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
19a80 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
19a90 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
19aa0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
19ab0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
19ac0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
19ad0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
19ae0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
19af0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
19b00 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
19b10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
19b20 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
19b30 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
19b40 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
19b50 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
19b60 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
19b70 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
19b80 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
19b90 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
19ba0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
19bb0 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
19bc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
19bd0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
19be0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
19bf0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19c00 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
19c10 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
19c20 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
19c30 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
19c40 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
19c50 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
19c60 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
19c70 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
19c80 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19c90 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
19ca0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
19cb0 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
19cc0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
19cd0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
19ce0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
19cf0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
19d00 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
19d10 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
19d20 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19d30 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
19d40 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
19d50 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
19d60 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
19d70 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
19d80 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
19d90 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
19da0 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
19db0 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
19dc0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
19dd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19de0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
19df0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
19e00 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
19e10 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
19e20 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
19e30 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
19e40 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
19e50 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19e60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
19e70 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
19e80 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
19e90 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
19ea0 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
19eb0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
19ec0 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
19ed0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
19ee0 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
19ef0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
19f00 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
19f10 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
19f20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
19f30 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
19f40 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
19f50 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
19f60 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
19f70 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
19f80 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
19f90 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
19fa0 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
19fb0 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
19fc0 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
19fd0 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
19fe0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
19ff0 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
1a000 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
1a010 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
1a020 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
1a030 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1a040 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
1a050 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
1a060 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
1a070 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
1a080 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1a090 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1a0a0 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
1a0b0 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
1a0c0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1a0d0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1a0e0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1a0f0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1a100 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1a110 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1a120 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1a130 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1a140 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1a150 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1a160 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
1a170 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
1a180 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a190 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
1a1a0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1a1b0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1a1c0 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1a1d0 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
1a1e0 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
1a1f0 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
1a200 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
1a210 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
1a220 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
1a230 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
1a240 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
1a250 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
1a260 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a270 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
1a280 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
1a290 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
1a2a0 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
1a2b0 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
1a2c0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1a2d0 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
1a2e0 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
1a2f0 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
1a300 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
1a310 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
1a320 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
1a330 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
1a340 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
1a350 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
1a360 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
1a370 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
1a380 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
1a390 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
1a3a0 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
1a3b0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1a3c0 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
1a3d0 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
1a3e0 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
1a3f0 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
1a400 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
1a410 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1a420 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
1a430 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
1a440 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
1a450 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
1a460 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
1a470 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a480 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
1a490 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
1a4a0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
1a4b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
1a4c0 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
1a4d0 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
1a4e0 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
1a4f0 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
1a500 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
1a510 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
1a520 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
1a530 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
1a540 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
1a550 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
1a560 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
1a570 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
1a580 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
1a590 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
1a5a0 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
1a5b0 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
1a5c0 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
1a5d0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
1a5e0 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
1a5f0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1a600 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1a610 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1a620 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1a630 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1a640 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1a650 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1a660 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1a670 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
1a680 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
1a690 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
1a6a0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
1a6b0 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
1a6c0 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
1a6d0 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
1a6e0 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
1a6f0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1a700 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1a710 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1a720 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1a730 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1a740 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a750 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70   OpenWrite, Reop
1a760 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  enIdx.*/./* Opco
1a770 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31  de: ReopenIdx P1
1a780 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1a790 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1a7a0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54  2 iDb=P3.**.** T
1a7b0 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1a7c0 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ode works exactl
1a7d0 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20  y like ReadOpen 
1a7e0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1a7f0 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1a800 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1a810 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1a820 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61  eady open with a
1a830 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75   root page.** nu
1a840 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69  mber of P2 and i
1a850 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63  f it is this opc
1a860 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f  ode becomes a no
1a870 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  -op.  In other w
1a880 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20  ords,.** if the 
1a890 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
1a8a0 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72  y open, do not r
1a8b0 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  eopen it..**.** 
1a8c0 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1a8d0 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65  code may only be
1a8e0 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30   used with P5==0
1a8f0 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69   and with P4 bei
1a900 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e  ng.** a P4_KEYIN
1a910 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1a920 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1a930 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68  value must be th
1a940 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65  e same as.** eve
1a950 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1a960 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1a970 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1a980 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  or number..**.**
1a990 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61   See the OpenRea
1a9a0 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e  d opcode documen
1a9b0 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
1a9c0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1a9d0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
1a9e0 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
1a9f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1aa00 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1aa10 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1aa20 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
1aa30 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
1aa40 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1aa50 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
1aa60 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
1aa70 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
1aa80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1aa90 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
1aaa0 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
1aab0 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
1aac0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1aad0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1aae0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1aaf0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1ab00 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1ab10 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1ab20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1ab30 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1ab40 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1ab50 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1ab60 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1ab70 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1ab80 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1ab90 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1aba0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1abb0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1abc0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1abd0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1abe0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1abf0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1ac00 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
1ac10 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
1ac20 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
1ac30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1ac40 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
1ac50 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
1ac60 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
1ac70 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
1ac80 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1ac90 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
1aca0 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
1acb0 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
1acc0 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
1acd0 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
1ace0 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
1acf0 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
1ad00 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
1ad10 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
1ad20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
1ad30 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
1ad40 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
1ad50 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74  openIdx: {.  int
1ad60 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1ad70 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1ad80 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1ad90 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1ada0 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1adb0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1adc0 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1add0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1ade0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1adf0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1ae00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ae10 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1ae20 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1ae30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1ae40 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1ae50 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1ae60 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1ae70 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1ae80 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1ae90 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1aea0 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1aeb0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1aec0 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f   goto open_curso
1aed0 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d  r_set_hints;.  }
1aee0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1aef0 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1af00 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1af10 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1af20 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1af30 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1af40 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1af50 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1af60 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  open */.case OP_
1af70 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1af80 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20  P_OpenWrite:..  
1af90 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
1afa0 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  &(OPFLAG_P2ISREG
1afb0 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c  |OPFLAG_BULKCSR|
1afc0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 3d  OPFLAG_SEEKEQ))=
1afd0 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73  =pOp->p5 );.  as
1afe0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1aff0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1b000 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1b010 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1b020 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1b030 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1b040 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1b050 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1b060 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1b070 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1b080 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1b090 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1b0a0 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1b0b0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1b0c0 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1b0d0 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72 65  OLLBACK;.    bre
1b0e0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
1b0f0 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1b100 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1b110 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1b120 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1b130 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1b140 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b150 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b160 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1b170 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1b180 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1b190 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1b1a0 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1b1b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1b1c0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1b1d0 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   ){.    wrFlag =
1b1e0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1b1f0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1b200 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1b210 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1b220 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1b230 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1b240 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1b250 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1b260 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1b270 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1b280 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1b290 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1b2a0 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1b2b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1b2c0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1b2d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1b2e0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1b2f0 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d   p2<=(p->nMem-p-
1b300 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1b310 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1b320 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1b330 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1b340 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1b350 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1b360 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1b370 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1b380 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1b390 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1b3a0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1b3b0 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1b3c0 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1b3d0 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1b3e0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1b3f0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1b400 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1b410 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1b420 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1b430 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1b440 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1b450 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1b460 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1b470 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1b480 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1b490 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1b4a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1b4b0 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28  /.    if( NEVER(
1b4c0 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20  p2<2) ) {.      
1b4d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
1b4e0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
1b4f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b500 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1b510 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1b520 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1b530 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1b540 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1b550 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1b560 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b570 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1b580 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1b590 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1b5a0 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1b5b0 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66  ->nField+pKeyInf
1b5c0 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65  o->nXField;.  }e
1b5d0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1b5e0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1b5f0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1b600 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1b610 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b620 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1b630 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1b640 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1b650 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1b660 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1b670 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1b680 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1b690 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1b6a0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b6b0 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
1b6c0 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1b6d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1b6e0 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1b6f0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1b700 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1b710 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1b720 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1b730 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1b740 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1b750 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
1b760 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1b770 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1b780 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ;.  /* Set the V
1b790 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1b7a0 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1b7b0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1b7c0 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1b7d0 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1b7e0 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1b7f0 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1b800 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1b810 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1b820 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1b830 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1b840 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1b850 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1b860 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1b870 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1b880 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1b890 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1b8a0 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e  4_KEYINFO;..open
1b8b0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1b8c0 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  s:.  assert( OPF
1b8d0 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1b8e0 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1b8f0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1b900 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45  SEEKEQ==BTREE_SE
1b910 45 4b 5f 45 51 20 29 3b 0a 20 20 73 71 6c 69 74  EK_EQ );.  sqlit
1b920 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1b930 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  ts(pCur->pCursor
1b940 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1b950 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
1b960 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42  ->p5 & (OPFLAG_B
1b970 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45  ULKCSR|OPFLAG_SE
1b980 45 4b 45 51 29 29 29 3b 0a 20 20 62 72 65 61 6b  EKEQ)));.  break
1b990 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b9a0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1b9b0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1b9c0 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1b9d0 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1b9e0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1b9f0 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1ba00 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1ba10 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1ba20 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1ba30 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1ba40 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1ba50 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1ba60 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1ba70 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1ba80 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1ba90 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1baa0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1bab0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1bac0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1bad0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1bae0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1baf0 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1bb00 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1bb10 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1bb20 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1bb30 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1bb40 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1bb50 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1bb60 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1bb70 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1bb80 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1bb90 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1bba0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1bbb0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1bbc0 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1bbd0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1bbe0 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1bbf0 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1bc00 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1bc10 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1bc20 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1bc30 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1bc40 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1bc50 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1bc60 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1bc70 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1bc80 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1bc90 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1bca0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1bcb0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1bcc0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1bcd0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1bce0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1bcf0 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1bd00 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1bd10 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1bd20 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1bd30 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1bd40 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1bd50 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1bd60 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1bd70 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1bd80 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1bd90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1bda0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1bdb0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1bdc0 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1bdd0 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1bde0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1bdf0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1be00 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1be10 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1be20 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1be30 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1be40 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1be50 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1be60 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1be70 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1be80 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1be90 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1bea0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1beb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1bec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1bed0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1bee0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1bef0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1bf00 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
1bf10 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1bf20 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1bf30 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1bf40 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20  ->isEphemeral = 
1bf50 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1bf60 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
1bf70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
1bf80 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20  ->pBt, .        
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1bfb0 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1bfc0 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1bfd0 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1bfe0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1bff0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c000 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1c010 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
1c020 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1c030 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1c040 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1c050 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1c060 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1c070 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1c080 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1c090 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1c0a0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1c0b0 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1c0c0 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1c0d0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1c0e0 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1c0f0 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1c100 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1c110 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1c120 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1c130 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1c140 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1c150 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f     if( (pKeyInfo
1c160 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1c170 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1c180 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1c190 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1c1a0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1c1b0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1c1c0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1c1d0 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c  eTable(pCx->pBt,
1c1e0 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c   &pgno, BTREE_BL
1c1f0 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29  OBKEY | pOp->p5)
1c200 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
1c210 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c220 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
1c230 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
1c240 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  1 );.        ass
1c250 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1c260 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20  b==db );.       
1c270 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c280 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1c290 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1c2a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1c2b0 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20  nfo;.        rc 
1c2c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1c2d0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
1c2e0 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f  gno, 1, pKeyInfo
1c2f0 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1c300 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1c310 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1c320 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1c330 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c340 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1c350 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
1c360 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
1c370 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1c380 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1c390 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1c3a0 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1c3b0 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1c3c0 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1c3d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1c3e0 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1c3f0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1c400 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1c410 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1c420 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1c430 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1c440 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1c450 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1c460 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1c470 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1c480 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1c490 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1c4a0 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1c4b0 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1c4c0 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1c4d0 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1c4e0 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1c4f0 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1c500 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1c510 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1c520 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1c530 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1c540 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1c550 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1c560 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1c570 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1c580 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1c590 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1c5a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c5b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1c5c0 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1c5d0 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1c5e0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1c5f0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1c600 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1c610 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1c620 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1c630 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1c640 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1c650 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1c660 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1c670 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1c680 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1c690 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1c6a0 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f  orterInit(db, pO
1c6b0 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62  p->p3, pCx);.  b
1c6c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c6d0 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74  de: SequenceTest
1c6e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1c6f0 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75  Synopsis: if( cu
1c700 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29  rsor[P1].ctr++ )
1c710 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50   pc = P2.**.** P
1c720 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
1c730 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71  rsor. If the seq
1c740 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73  uence counter is
1c750 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c   currently zero,
1c760 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1c770 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
1c780 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1c790 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
1c7a0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  increment the.**
1c7b0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61   the sequence va
1c7c0 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
1c7d0 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a  SequenceTest: {.
1c7e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1c7f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c800 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c810 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1c820 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c830 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c840 72 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20  rt( pC->pSorter 
1c850 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
1c860 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
1c870 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
1c880 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
1c890 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c8a0 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1c8b0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1c8c0 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1c8d0 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1c8e0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1c8f0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1c900 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1c910 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1c920 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1c930 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1c940 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1c950 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1c960 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1c970 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1c980 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1c990 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1c9a0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1c9b0 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1c9c0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1c9d0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1c9e0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1c9f0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1ca00 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1ca10 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1ca20 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1ca30 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1ca40 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1ca50 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1ca60 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1ca70 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1ca80 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1ca90 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1caa0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1cab0 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1cac0 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1cad0 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1cae0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1caf0 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1cb00 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1cb10 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1cb20 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1cb30 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1cb40 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1cb50 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1cb60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1cb70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1cb80 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1cb90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1cba0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1cbb0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1cbc0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1cbd0 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
1cbe0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1cbf0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1cc00 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1cc10 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1cc20 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1cc30 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1cc40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1cc50 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1cc60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1cc70 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1cc80 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1cc90 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1cca0 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1ccb0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1ccc0 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1ccd0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1cce0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1ccf0 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1cd00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1cd10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1cd20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1cd30 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1cd40 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1cd50 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1cd60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1cd70 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1cd80 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1cd90 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1cda0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1cdb0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1cdc0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cdd0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1cde0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1cdf0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1ce00 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1ce10 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1ce20 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
1ce30 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
1ce40 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1ce50 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1ce60 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1ce70 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1ce80 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1ce90 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1cea0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1ceb0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1cec0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1ced0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1cee0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1cef0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1cf00 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1cf10 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1cf20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1cf30 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1cf40 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
1cf50 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1cf60 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1cf70 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1cf80 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1cf90 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1cfa0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1cfb0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1cfc0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1cfd0 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1cfe0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1cff0 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1d000 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1d010 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1d020 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1d030 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1d040 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1d050 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d060 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1d070 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1d080 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1d090 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kGT P1 P2 P3 P4 
1d0a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1d0b0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1d0c0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1d0d0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1d0e0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1d0f0 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1d100 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1d110 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1d120 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1d130 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1d140 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1d150 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1d160 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1d170 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1d180 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1d190 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1d1a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1d1b0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1d1c0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1d1d0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1d1e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1d1f0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1d200 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1d210 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1d220 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d230 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1d240 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1d250 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1d260 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1d270 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1d280 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1d290 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1d2a0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1d2b0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1d2c0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1d2d0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1d2e0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1d2f0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1d300 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1d310 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1d320 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1d330 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d340 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1d350 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1d360 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1d370 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1d380 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1d390 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1d3a0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1d3b0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1d3c0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1d3d0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1d3e0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1d3f0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1d400 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1d410 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1d420 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1d430 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1d440 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1d450 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1d460 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1d470 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1d480 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1d490 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1d4a0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1d4b0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1d4c0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1d4d0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1d4e0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1d4f0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1d500 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1d510 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1d520 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1d530 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1d540 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1d550 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1d560 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1d570 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1d580 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1d590 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1d5a0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1d5b0 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1d5c0 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1d5d0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1d5e0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1d5f0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1d600 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1d610 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1d620 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1d630 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1d640 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1d650 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1d660 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1d670 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1d680 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1d690 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1d6a0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1d6b0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1d6c0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1d6d0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1d6e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1d6f0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1d700 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1d710 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1d720 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1d730 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1d740 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1d750 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1d760 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1d770 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1d780 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1d790 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1d7a0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1d7b0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1d7c0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1d7d0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1d7e0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1d7f0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1d800 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1d810 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1d820 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1d830 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1d840 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1d850 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1d860 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1d870 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1d880 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1d890 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1d8a0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1d8b0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1d8c0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1d8d0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1d8e0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1d8f0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1d900 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1d910 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1d920 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1d930 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1d940 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
1d950 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1d960 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1d970 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
1d980 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d990 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
1d9a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1d9b0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1d9c0 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
1d9d0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d9e0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
1d9f0 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73  t oc;.  VdbeCurs
1da00 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b  or *pC;.  Unpack
1da10 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e  edRecord r;.  in
1da20 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20  t nField;.  i64 
1da30 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68  iKey;      /* Th
1da40 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1da50 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20  o seek to */..  
1da60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1da70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1da80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1da90 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1daa0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1dab0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1dac0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1dad0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1dae0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1daf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1db00 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
1db10 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
1db20 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
1db30 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
1db40 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1db50 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
1db60 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1db70 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1db80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1db90 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f  Cursor!=0 );.  o
1dba0 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
1dbb0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1dbc0 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
1dbd0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1dbe0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1dbf0 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  de;.#endif..  /*
1dc00 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
1dc10 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
1dc20 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
1dc30 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
1dc40 64 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45  d.  ** OP_SeekLE
1dc50 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c   opcodes are all
1dc60 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20  owed, and these 
1dc70 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74  must be immediat
1dc80 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 2a  ely followed.  *
1dc90 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54  * by an OP_IdxGT
1dca0 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63   or OP_IdxLT opc
1dcb0 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ode, respectivel
1dcc0 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  y, with the same
1dcd0 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23 69 66 64 65   key..  */.#ifde
1dce0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1dcf0 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
1dd00 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
1dd10 43 2d 3e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  C->pCursor, BTRE
1dd20 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20  E_SEEK_EQ) ){.  
1dd30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1dd40 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
1dd50 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1dd60 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
1dd70 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1dd80 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
1dd90 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
1dda0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
1ddb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1ddc0 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
1ddd0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1dde0 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30  pOp[1].p2==pOp[0
1ddf0 5d 2e 70 32 20 29 3b 0a 20 20 20 20 61 73 73 65  ].p2 );.    asse
1de00 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70  rt( pOp[1].p3==p
1de10 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20  Op[0].p3 );.    
1de20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1de30 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69  4.i==pOp[0].p4.i
1de40 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20   );.  }.#endif. 
1de50 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
1de60 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
1de70 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1de80 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1de90 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1dea0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1deb0 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1dec0 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1ded0 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1dee0 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1def0 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
1df00 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
1df10 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
1df20 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1df30 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
1df40 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
1df50 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
1df60 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
1df70 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
1df80 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1df90 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
1dfa0 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1dfb0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1dfc0 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  3);..    /* If t
1dfd0 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1dfe0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1dff0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1e000 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
1e010 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1e020 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1e030 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1e040 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1e050 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1e060 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1e070 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
1e080 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1e090 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
1e0a0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1e0b0 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
1e0c0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1e0d0 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
1e0e0 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
1e0f0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
1e100 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
1e110 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
1e120 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  2 */.        Vdb
1e130 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
1e140 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f  ); goto jump_to_
1e150 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  p2;.        brea
1e160 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
1e170 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1e180 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1e190 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
1e1a0 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1e1b0 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1e1c0 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
1e1d0 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
1e1e0 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
1e1f0 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
1e200 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
1e210 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
1e220 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
1e230 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
1e240 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
1e250 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1e260 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
1e270 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
1e280 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
1e290 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
1e2a0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72     if( pIn3->u.r
1e2b0 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  <(double)iKey ){
1e2c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e2d0 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f   OP_SeekGE==(OP_
1e2e0 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20  SeekGT-1) );.   
1e2f0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1e300 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLT==(OP_Seek
1e310 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LE-1) );.       
1e320 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1e330 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLE & 0x0001)==(
1e340 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
1e350 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1e360 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1e370 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
1e380 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20  x0001) ) oc--;. 
1e390 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1e3a0 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1e3b0 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d  ation iKey is sm
1e3c0 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61  aller than the a
1e3d0 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1e3e0 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1e3f0 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66   substitute <= f
1e400 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e  or < and > for >
1e410 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73  =.  */.      els
1e420 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e  e if( pIn3->u.r>
1e430 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1e440 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e450 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53  OP_SeekLE==(OP_S
1e460 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20  eekLT+1) );.    
1e470 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1e480 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGT==(OP_SeekG
1e490 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E+1) );.        
1e4a0 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1e4b0 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LT & 0x0001)==(O
1e4c0 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30  P_SeekGE & 0x000
1e4d0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1e4e0 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1e4f0 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78  =(OP_SeekLT & 0x
1e500 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20  0001) ) oc++;.  
1e510 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20      }.    } .   
1e520 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e530 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1e540 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1e550 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1e560 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f  res);.    pC->mo
1e570 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
1e580 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
1e590 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20  P_Delete */.    
1e5a0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e5b0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1e5c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1e5d0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  or;.    }.  }els
1e5e0 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  e{.    nField = 
1e5f0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
1e600 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1e610 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1e620 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
1e630 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
1e640 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1e650 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1e660 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
1e670 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
1e680 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
1e690 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
1e6a0 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
1e6b0 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
1e6c0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc==OP_SeekGT ||
1e6d0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1e6e0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1e6f0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
1e700 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a      **   }else{.
1e710 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
1e720 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20  ault_rc = +1;.  
1e730 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a    **   }.    */.
1e740 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
1e750 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f   = ((1 & (oc - O
1e760 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20  P_SeekLT)) ? -1 
1e770 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72  : +1);.    asser
1e780 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54  t( oc!=OP_SeekGT
1e790 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1e7a0 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1e7b0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1e7c0 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1e7d0 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1e7e0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1e7f0 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GE || r.default_
1e800 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73  rc==+1 );.    as
1e810 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1e820 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLT || r.default
1e830 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20  _rc==+1 );..    
1e840 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
1e850 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
1e860 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1e870 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
1e880 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
1e890 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
1e8a0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
1e8b0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
1e8c0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e     ExpandBlob(r.
1e8d0 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20  aMem);.    rc = 
1e8e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1e8f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1e900 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
1e910 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1e920 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e930 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
1e940 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e950 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d  .    }.  }.  pC-
1e960 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e970 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1e980 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1e990 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
1e9a0 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1e9b0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1e9c0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
1e9d0 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
1e9e0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1e9f0 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
1ea00 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
1ea10 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1ea20 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1ea30 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
1ea40 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1ea50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ea60 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1ea70 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1ea80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ea90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1eaa0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1eab0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73  }else{.      res
1eac0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 0;.    }.  }e
1ead0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1eae0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc==OP_SeekLT |
1eaf0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1eb00 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30  );.    if( res>0
1eb10 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1eb20 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b  c==OP_SeekLT) ){
1eb30 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1eb40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1eb50 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
1eb60 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1eb70 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1eb80 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1eb90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1eba0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
1ebb0 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d  {.      /* res m
1ebc0 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
1ebd0 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
1ebe0 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
1ebf0 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  eck to.      ** 
1ec00 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
1ec10 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a  he case..      *
1ec20 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71  /.      res = sq
1ec30 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1ec40 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1ec50 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1ec60 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56  pOp->p2>0 );.  V
1ec70 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
1ec80 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
1ec90 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  res ){.    goto 
1eca0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
1ecb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ecc0 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1ecd0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1ece0 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50  sis:  intkey=r[P
1ecf0 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  2].**.** P1 is a
1ed00 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72  n open table cur
1ed10 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20  sor and P2 is a 
1ed20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20  rowid integer.  
1ed30 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50  Arrange.** for P
1ed40 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61  1 to move so tha
1ed50 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1ed60 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62  he rowid given b
1ed70 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  y P2..**.** This
1ed80 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64   is actually a d
1ed90 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
1eda0 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
1edb0 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
1edc0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
1edd0 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
1ede0 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
1edf0 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
1ee00 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
1ee10 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
1ee20 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  s..*/.case OP_Se
1ee30 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20  ek: {    /* in2 
1ee40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1ee50 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
1ee60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ee70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ee80 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ee90 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1eea0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1eeb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1eec0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
1eed0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1eee0 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  le );.  pC->null
1eef0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20  Row = 0;.  pIn2 
1ef00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
1ef10 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
1ef20 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64  rget = sqlite3Vd
1ef30 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
1ef40 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1ef50 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72  Moveto = 1;.  br
1ef60 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70  eak;.}.  ../* Op
1ef70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50  code: Found P1 P
1ef80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1ef90 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1efa0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1efb0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1efc0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1efd0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1efe0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1eff0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1f000 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1f010 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1f020 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1f030 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1f040 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72  ecord..**.** Cur
1f050 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1f060 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1f070 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1f080 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1f090 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66   P4.** is a pref
1f0a0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1f0b0 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1f0c0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
1f0d0 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66  and.** P1 is lef
1f0e0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1f0f0 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
1f100 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
1f110 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
1f120 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
1f130 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
1f140 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
1f150 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64  in the forward d
1f160 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e  irection.  The N
1f170 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
1f180 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75  will work,.** bu
1f190 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69  t not the Prev i
1f1a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
1f1b0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1f1c0 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
1f1d0 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65  , NotExists. See
1f1e0 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kGe.*/./* Opcode
1f1f0 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32  : NotFound P1 P2
1f200 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1f210 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1f220 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1f230 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1f240 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1f250 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1f260 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1f270 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1f280 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1f290 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1f2a0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1f2b0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1f2c0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1f2d0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1f2e0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1f2f0 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1f300 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1f310 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
1f320 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
1f330 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
1f340 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
1f350 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
1f360 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
1f370 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
1f380 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
1f390 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
1f3a0 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
1f3b0 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1f3c0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1f3d0 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
1f3e0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1f3f0 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
1f400 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
1f410 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1f420 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1f430 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1f440 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
1f450 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
1f460 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
1f470 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f480 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
1f490 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
1f4a0 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
1f4b0 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
1f4c0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f4d0 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f  d, NotExists, No
1f4e0 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f  Conflict.*/./* O
1f4f0 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63  pcode: NoConflic
1f500 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
1f510 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1f520 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1f530 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
1f540 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1f550 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1f560 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1f570 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
1f580 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
1f590 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
1f5a0 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
1f5b0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
1f5c0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
1f5d0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1f5e0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1f5f0 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1f600 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1f610 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f   P3 and P4.** co
1f620 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20  ntains any NULL 
1f630 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
1f640 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1f650 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20  If all terms of 
1f660 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72  the.** record ar
1f670 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20  e not-NULL then 
1f680 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  a check is done 
1f690 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if 
1f6a0 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a  any row in the.*
1f6b0 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65  * P1 index btree
1f6c0 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20   has a matching 
1f6d0 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20  key prefix.  If 
1f6e0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74  there are no mat
1f6f0 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d  ches, jump.** im
1f700 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1f710 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20    If there is a 
1f720 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f  match, fall thro
1f730 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68  ugh and leave th
1f740 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70  e P1.** cursor p
1f750 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d  ointing to the m
1f760 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a  atching row..**.
1f770 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
1f780 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f  s similar to OP_
1f790 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68  NotFound with th
1f7a0 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61  e exceptions tha
1f7b0 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20  t the.** branch 
1f7c0 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20  is always taken 
1f7d0 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74  if any part of t
1f7e0 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e  he search key in
1f7f0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  put is NULL..**.
1f800 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1f810 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1f820 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1f830 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
1f840 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1f850 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
1f860 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
1f870 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
1f880 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
1f890 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
1f8a0 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
1f8b0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
1f8c0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75  o: NotFound, Fou
1f8d0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  nd, NotExists.*/
1f8e0 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  .case OP_NoConfl
1f8f0 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70  ict:     /* jump
1f900 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f910 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1f920 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f930 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1f940 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1f950 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
1f960 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1f970 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20  int takeJump;.  
1f980 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75  int ii;.  VdbeCu
1f990 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
1f9a0 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72  res;.  char *pFr
1f9b0 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ee;.  UnpackedRe
1f9c0 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20  cord *pIdxKey;. 
1f9d0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1f9e0 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52  r;.  char aTempR
1f9f0 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  ec[ROUND8(sizeof
1fa00 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29  (UnpackedRecord)
1fa10 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a  ) + sizeof(Mem)*
1fa20 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20  4 + 7];..#ifdef 
1fa30 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66  SQLITE_TEST.  if
1fa40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
1fa50 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73  P_NoConflict ) s
1fa60 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
1fa70 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  nt++;.#endif..  
1fa80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1fa90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1faa0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1fab0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1fac0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1fad0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1fae0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1faf0 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
1fb00 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fb10 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1fb20 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1fb30 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  if.  pIn3 = &aMe
1fb40 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1fb50 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1fb60 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1fb70 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1fb80 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
1fb90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69  .  if( pOp->p4.i
1fba0 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 ){.    r.pKey
1fbb0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1fbc0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1fbd0 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
1fbe0 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  .i;.    r.aMem =
1fbf0 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69   pIn3;.    for(i
1fc00 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64  i=0; ii<r.nField
1fc10 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  ; ii++){.      a
1fc20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1fc30 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29  d(&r.aMem[ii]) )
1fc40 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c  ;.      ExpandBl
1fc50 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  ob(&r.aMem[ii]);
1fc60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1fc70 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20 69  EBUG.      if( i
1fc80 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41  i ) REGISTER_TRA
1fc90 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26  CE(pOp->p3+ii, &
1fca0 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e  r.aMem[ii]);.#en
1fcb0 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49  dif.    }.    pI
1fcc0 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65  dxKey = &r;.  }e
1fcd0 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79  lse{.    pIdxKey
1fce0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
1fcf0 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
1fd00 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  d(.        pC->p
1fd10 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65  KeyInfo, aTempRe
1fd20 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
1fd30 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20  ec), &pFree.    
1fd40 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
1fd50 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
1fd60 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
1fd70 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1fd80 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45  EM_Blob );.    E
1fd90 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
1fda0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1fdb0 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
1fdc0 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
1fdd0 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
1fde0 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
1fdf0 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
1fe00 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70   = 0;.  takeJump
1fe10 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
1fe20 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
1fe30 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
1fe40 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
1fe50 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
1fe60 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
1fe70 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
1fe80 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
1fe90 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
1fea0 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
1feb0 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
1fec0 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
1fed0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
1fee0 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b  pIdxKey->nField;
1fef0 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
1ff00 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b  ( pIdxKey->aMem[
1ff10 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1ff20 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
1ff30 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20  takeJump = 1;.  
1ff40 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ff50 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
1ff60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ff70 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1ff80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1ff90 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1ffa0 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  s);.  sqlite3DbF
1ffb0 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a  ree(db, pFree);.
1ffc0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ffd0 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  _OK ){.    break
1ffe0 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
1fff0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
20000 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
20010 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
20020 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
20030 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
20040 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
20050 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
20060 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
20070 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
20080 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
20090 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  d ){.    VdbeBra
200a0 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
200b0 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  Exists!=0,2);.  
200c0 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
200d0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
200e0 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
200f0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
20100 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c  ken(takeJump||al
20110 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32  readyExists==0,2
20120 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a  );.    if( takeJ
20130 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45  ump || !alreadyE
20140 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
20150 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
20160 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20170 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
20180 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
20190 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
201a0 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
201b0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
201c0 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
201d0 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
201e0 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
201f0 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
20200 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
20210 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
20220 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
20230 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
20240 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
20250 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20260 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  .  If P1 does co
20270 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a  ntain a record.*
20280 2a 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  * with rowid P3 
20290 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63  then leave the c
202a0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
202b0 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
202c0 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67  d fall.** throug
202d0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
202e0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
202f0 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
20300 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
20310 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
20320 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
20330 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
20340 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
20350 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
20360 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
20370 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
20380 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
20390 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
203a0 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
203b0 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
203c0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
203d0 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
203e0 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
203f0 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
20400 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
20410 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20420 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
20430 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63   NoConflict.*/.c
20440 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
20450 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
20460 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
20470 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
20480 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
20490 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
204a0 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
204b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
204c0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
204d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
204e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
204f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20500 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20510 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
20520 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
20530 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
20540 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
20550 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
20560 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
20570 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20580 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
20590 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
205a0 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  g==0 );.  pCrsr 
205b0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
205c0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
205d0 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  0 );.  res = 0;.
205e0 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
205f0 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  .i;.  rc = sqlit
20600 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
20610 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
20620 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
20630 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
20640 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
20650 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
20660 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   */.  pC->nullRo
20670 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 0;.  pC->cac
20680 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20690 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65  _STALE;.  pC->de
206a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
206b0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
206c0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
206d0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
206e0 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73  = res;.  if( res
206f0 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  !=0 ) goto jump_
20700 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
20710 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
20720 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
20730 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
20740 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
20750 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
20760 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
20770 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
20780 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
20790 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
207a0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
207b0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
207c0 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
207d0 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
207e0 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
207f0 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
20800 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
20810 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
20820 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
20830 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
20840 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20850 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20860 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20870 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
20880 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
20890 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
208a0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
208b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
208c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
208d0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
208e0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
208f0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
20900 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
20910 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
20920 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
20930 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
20940 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
20950 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
20960 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
20970 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
20980 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
20990 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
209a0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
209b0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
209c0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
209d0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
209e0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
209f0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
20a00 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
20a10 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
20a20 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
20a30 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
20a40 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
20a50 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
20a60 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
20a70 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
20a80 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
20a90 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
20aa0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
20ab0 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
20ac0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
20ad0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
20ae0 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
20af0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
20b00 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
20b10 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
20b20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
20b30 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
20b40 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
20b50 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
20b60 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
20b70 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
20b80 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
20b90 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
20ba0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
20bb0 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
20bc0 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
20bd0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
20be0 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20c00 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
20c10 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20c20 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
20c30 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
20c40 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
20c50 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20c70 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
20c80 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
20c90 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
20cb0 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
20cc0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
20cd0 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
20ce0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
20cf0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
20d00 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
20d10 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
20d20 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
20d30 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
20d40 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
20d50 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
20d60 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
20d70 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
20d80 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
20d90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20da0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20db0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20dc0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20dd0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20de0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
20df0 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
20e00 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
20e10 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
20e20 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
20e30 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
20e40 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
20e50 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
20e60 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
20e70 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
20e80 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
20e90 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
20ea0 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
20eb0 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
20ec0 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
20ed0 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
20ee0 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
20ef0 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
20f00 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
20f10 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
20f20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
20f30 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
20f40 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
20f50 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
20f60 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
20f70 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
20f80 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
20f90 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
20fa0 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
20fb0 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
20fc0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
20fd0 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
20fe0 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
20ff0 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
21000 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
21010 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
21020 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
21030 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
21040 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
21050 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
21060 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
21070 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
21080 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
21090 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
210a0 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
210b0 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
210c0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
210d0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
210e0 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
210f0 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
21100 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
21110 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
21120 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
21130 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
21140 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
21150 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
21160 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
21170 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
21180 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
21190 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
211a0 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
211b0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
211c0 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
211d0 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
211e0 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
211f0 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
21200 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
21210 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
21220 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
21230 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
21240 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
21250 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
21260 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
21270 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
21280 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21290 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
212a0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
212b0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
212c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
212d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
212e0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
212f0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
21300 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
21310 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
21320 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
21330 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
21340 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
21350 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
21360 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
21370 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
21380 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
21390 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
213a0 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  v);.        asse
213b0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
213c0 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
213d0 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
213e0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
213f0 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
21400 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
21410 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
21420 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
21430 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
21440 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
21450 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
21460 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
21470 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
21480 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21490 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
214a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
214b0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
214c0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
214d0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
214e0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
214f0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
21500 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
21510 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
21520 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
21530 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
21540 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
21550 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
21560 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
21570 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21580 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21590 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
215a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
215b0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
215c0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
215d0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
215e0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
215f0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
21600 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
21610 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
21620 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
21630 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
21640 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
21650 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
21660 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
21670 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
21680 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
21690 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
216a0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
216b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
216c0 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
216d0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
216e0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
216f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
21700 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
21710 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
21720 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
21730 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
21740 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
21750 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
21760 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
21770 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
21780 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
21790 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
217a0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
217b0 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
217c0 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
217d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
217e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
217f0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
21800 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
21810 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
21820 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
21830 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
21840 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
21850 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
21860 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
21870 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
21880 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
21890 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
218a0 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
218b0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
218c0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
218d0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
218e0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
218f0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
21900 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
21910 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
21920 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
21930 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
21940 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
21950 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
21960 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
21970 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
21980 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
21990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
219a0 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
219b0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
219c0 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
219d0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219f0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
21a00 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
21a10 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
21a20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
21a30 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
21a40 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
21a50 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
21a60 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
21a70 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
21a80 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
21a90 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
21aa0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
21ab0 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
21ac0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21ad0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
21ae0 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b10 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
21b20 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
21b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
21b40 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
21b50 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
21b60 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  00));.      if( 
21b70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
21b80 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
21b90 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
21ba0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
21bb0 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a  -38219-53002 */.
21bc0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
21bd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21be0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
21bf0 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f  ssert( v>0 );  /
21c00 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33  * EV: R-40812-03
21c10 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  570 */.    }.   
21c20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21c30 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
21c40 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
21c50 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
21c60 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
21c70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21c80 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50  Opcode: Insert P
21c90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
21ca0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
21cb0 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50  y=r[P3] data=r[P
21cc0 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  2].**.** Write a
21cd0 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65  n entry into the
21ce0 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72   table of cursor
21cf0 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72   P1.  A new entr
21d00 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  y is.** created 
21d10 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c  if it doesn't al
21d20 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74  ready exist or t
21d30 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65  he data for an e
21d40 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79  xisting.** entry
21d50 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e   is overwritten.
21d60 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68    The data is th
21d70 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62  e value MEM_Blob
21d80 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
21d90 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32  ter.** number P2
21da0 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f  . The key is sto
21db0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21dc0 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74  P3. The key must
21dd0 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74  .** be a MEM_Int
21de0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
21df0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
21e00 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
21e10 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
21e20 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
21e30 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
21e40 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49  herwise not).  I
21e50 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53  f the OPFLAG_LAS
21e60 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50  TROWID flag of P
21e70 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65  5 is set,.** the
21e80 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65  n rowid is store
21e90 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74  d for subsequent
21ea0 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a   return by the.*
21eb0 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  * sqlite3_last_i
21ec0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
21ed0 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73  nction (otherwis
21ee0 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69  e it is unmodifi
21ef0 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ed)..**.** If th
21f00 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
21f10 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
21f20 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20  5 is set and if 
21f30 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
21f40 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f   the last seek o
21f50 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74  peration (OP_Not
21f60 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75  Exists) was a su
21f70 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73  ccess, then this
21f80 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69  .** operation wi
21f90 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  ll not attempt t
21fa0 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f  o find the appro
21fb0 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72  priate row befor
21fc0 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69  e doing.** the i
21fd0 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69  nsert but will i
21fe0 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65  nstead overwrite
21ff0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68   the row that th
22000 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
22010 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
22020 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c  g to.  Presumabl
22030 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f  y, the prior OP_
22040 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65  NotExists opcode
22050 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20  .** has already 
22060 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
22070 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e  ursor correctly.
22080 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74    This is an opt
22090 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61  imization.** tha
220a0 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d  t boosts perform
220b0 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67  ance by avoiding
220c0 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73   redundant seeks
220d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
220e0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
220f0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
22100 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
22110 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
22120 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
22130 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
22140 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
22150 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
22160 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
22170 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
22180 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
22190 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
221a0 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
221b0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
221c0 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
221d0 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
221e0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
221f0 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d  ng the table-nam
22200 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20  e, or.** may be 
22210 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e  NULL. If it is n
22220 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
22230 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a  e update-hook .*
22240 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  * (sqlite3.xUpda
22250 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
22260 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67  nvoked following
22270 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
22280 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
22290 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
222a0 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
222b0 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
222c0 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
222d0 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
222e0 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
222f0 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
22300 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
22310 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
22320 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
22330 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
22340 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
22350 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
22360 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
22370 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
22380 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
22390 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
223a0 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
223b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
223c0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
223d0 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
223e0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
223f0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
22400 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
22410 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
22420 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
22430 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
22440 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
22450 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b  ntkey=P3 data=r[
22460 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P2].**.** This w
22470 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
22480 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
22490 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
224a0 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
224b0 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
224c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
224d0 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
224e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
224f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
22500 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
22510 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
22520 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
22530 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
22540 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
22550 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
22560 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
22570 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
22580 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
22590 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
225a0 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
225b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
225c0 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
225d0 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
225e0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
225f0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
22600 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
22610 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
22620 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
22630 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
22640 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
22650 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
22660 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
22670 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
22680 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
22690 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
226a0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
226b0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
226c0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
226d0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
226e0 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
226f0 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
22700 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
22710 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
22720 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
22730 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
22740 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
22750 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
22760 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
22770 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
22780 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
22790 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
227a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
227b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
227c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
227d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
227e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
227f0 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
22800 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22810 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22820 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22830 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
22840 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22850 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
22860 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
22870 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
22880 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
22890 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
228a0 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
228b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
228c0 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
228d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
228e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
228f0 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
22900 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
22910 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
22920 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
22930 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
22940 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
22950 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
22960 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
22970 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
22980 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
22990 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
229a0 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
229b0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
229c0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
229d0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
229e0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
229f0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
22a00 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
22a10 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
22a20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
22a30 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
22a40 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
22a50 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
22a60 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
22a70 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
22a80 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
22a90 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
22aa0 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
22ab0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22ac0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22ad0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
22ae0 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
22af0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
22b00 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a  M_Zero ){.    nZ
22b10 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
22b20 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
22b30 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
22b40 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
22b50 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
22b60 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
22b70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22b80 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
22b90 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
22ba0 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
22bd0 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
22be0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
22bf0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22c00 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
22c10 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22c20 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
22c30 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
22c40 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
22c50 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
22c60 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
22c70 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22c80 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
22c90 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  {.    zDb = db->
22ca0 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
22cb0 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70  me;.    zTbl = p
22cc0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70  Op->p4.z;.    op
22cd0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
22ce0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
22cf0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
22d00 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
22d10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
22d20 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
22d30 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22d40 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
22d50 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54  Arg, op, zDb, zT
22d60 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
22d70 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
22d80 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  0 );.  }.  break
22d90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22da0 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50  Delete P1 P2 * P
22db0 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  4 *.**.** Delete
22dc0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
22dd0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
22de0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
22df0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
22e00 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  The cursor will 
22e10 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
22e20 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e   at either the n
22e30 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
22e40 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
22e50 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
22e60 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
22e70 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
22e80 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
22e90 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
22ea0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
22eb0 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65   a no-op.  Hence
22ec0 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c   it is OK to del
22ed0 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ete.** a record 
22ee0 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65  from within a Ne
22ef0 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49  xt loop..**.** I
22f00 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
22f10 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
22f20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
22f30 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
22f40 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
22f50 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
22f60 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
22f70 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
22f80 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
22f90 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
22fa0 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
22fb0 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
22fc0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
22fd0 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
22fe0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
22ff0 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
23000 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
23010 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
23020 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
23030 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
23040 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
23050 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
23060 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
23070 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
23080 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
23090 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
230a0 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
230b0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
230c0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
230d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
230e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
230f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23100 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23110 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23120 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23130 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23140 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
23150 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
23160 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
23170 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
23180 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  les */.  assert(
23190 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
231a0 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65  eto==0 );..#ifde
231b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
231c0 20 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65   /* The seek ope
231d0 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69  ration that posi
231e0 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
231f0 72 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65  r prior to OP_De
23200 6c 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68  lete will.  ** h
23210 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65  ave also set the
23220 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
23230 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72  t field to the r
23240 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20  owid of the row 
23250 74 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69  that.  ** is bei
23260 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20  ng deleted */.  
23270 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26  if( pOp->p4.z &&
23280 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
23290 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30      i64 iKey = 0
232a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
232b0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
232c0 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20  ursor, &iKey);. 
232d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d     assert( pC->m
232e0 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
232f0 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66  y ); .  }.#endif
23300 0a 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  . .  rc = sqlite
23310 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
23320 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
23330 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23340 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
23350 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
23360 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
23370 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
23380 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
23390 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
233a0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
233b0 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   && pC->isTable 
233c0 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  ){.    db->xUpda
233d0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
233e0 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
233f0 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20  E_DELETE,.      
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44    db->aDb[pC->iD
23420 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70  b].zName, pOp->p
23430 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  4.z, pC->movetoT
23440 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73 65  arget);.    asse
23450 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
23460 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
23470 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
23480 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
23490 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
234a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
234b0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
234c0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
234d0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
234e0 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
234f0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
23500 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
23510 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
23520 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
23530 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
23540 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
23550 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
23560 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
23570 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
23580 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
23590 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
235a0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
235b0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
235c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
235d0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
235e0 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
235f0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
23600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
23610 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
23620 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
23630 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65  Synopsis:  if ke
23640 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
23650 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
23660 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
23670 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
23680 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
23690 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
236a0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
236b0 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
236c0 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
236d0 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
236e0 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
236f0 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
23700 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
23710 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
23720 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
23730 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
23740 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
23750 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
23760 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
23770 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
23780 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
23790 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
237a0 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
237b0 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
237c0 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
237d0 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
237e0 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
237f0 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
23800 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
23810 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
23820 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
23830 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
23840 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
23850 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
23860 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
23870 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
23880 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
23890 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
238a0 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
238b0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
238c0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
238d0 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
238e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
238f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23900 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
23910 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
23920 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
23930 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
23940 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23950 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
23960 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
23970 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
23980 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
23990 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
239a0 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
239b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
239c0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
239d0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
239e0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
239f0 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  };../* Opcode: S
23a00 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20  orterData P1 P2 
23a10 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
23a20 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
23a30 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
23a40 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
23a50 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
23a60 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
23a70 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
23a80 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75  n clear the colu
23a90 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20  mn header cache 
23aa0 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a  on cursor P3..**
23ab0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
23ac0 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20  is normally use 
23ad0 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64  to move a record
23ae0 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74   out of the sort
23af0 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61  er and into.** a
23b00 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69   register that i
23b10 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72  s the source for
23b20 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
23b30 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75  cursor created u
23b40 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75  sing.** OpenPseu
23b50 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f  do.  That pseudo
23b60 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73  -table cursor is
23b70 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73   the one that is
23b80 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a   identified by.*
23b90 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20  * parameter P3. 
23ba0 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33   Clearing the P3
23bb0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73   column cache as
23bc0 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70   part of this op
23bd0 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73  code saves.** us
23be0 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20   from having to 
23bf0 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65  issue a separate
23c00 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63   NullRow instruc
23c10 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68  tion to clear th
23c20 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73  at cache..*/.cas
23c30 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
23c40 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
23c50 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
23c60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
23c70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23c80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23c90 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
23ca0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
23cb0 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
23cc0 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61  y(pC, pOut);.  a
23cd0 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
23ce0 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66  E_OK || (pOut->f
23cf0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
23d00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
23d10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23d20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23d30 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
23d40 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74  ->p3]->cacheStat
23d50 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
23d60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23d70 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
23d80 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
23d90 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
23da0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
23db0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
23dc0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
23dd0 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73  ow data for curs
23de0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
23df0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
23e00 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
23e10 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
23e20 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
23e30 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
23e40 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
23e50 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
23e60 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
23e70 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
23e80 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
23e90 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
23ea0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
23eb0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
23ec0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
23ed0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
23ee0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  /./* Opcode: Row
23ef0 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Key P1 P2 * * *.
23f00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23f10 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69  2]=key.**.** Wri
23f20 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
23f30 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
23f40 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
23f50 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
23f60 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
23f70 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
23f80 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
23f90 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
23fa0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
23fb0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
23fc0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
23fd0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
23fe0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
23ff0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
24000 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
24010 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
24020 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
24030 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
24040 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
24050 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
24060 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
24070 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
24080 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
24090 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
240a0 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a   n;.  i64 n64;..
240b0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
240c0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
240d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
240e0 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  Out);..  /* Note
240f0 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
24100 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
24110 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
24120 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
24130 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
24140 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24150 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
24160 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
24170 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24180 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
24190 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
241a0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
241b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
241c0 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
241d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
241e0 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  le==0 || pOp->op
241f0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
24200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24210 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24220 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20   pC->nullRow==0 
24230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24240 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
24250 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24260 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
24270 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
24280 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54  pCursor;..  /* T
24290 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
242a0 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
242b0 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
242c0 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
242d0 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
242e0 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
242f0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
24300 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
24310 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
24320 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
24330 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20    If this where 
24340 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e  not the case, on
24350 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
24360 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a  g assert()s.  **
24370 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68   would fail.  Sh
24380 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63  ould this ever c
24390 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f  hange (because o
243a0 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  f changes in the
243b0 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72   code.  ** gener
243c0 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66  ator) then the f
243d0 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69  ix would be to i
243e0 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a  nsert a call to.
243f0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
24400 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a  CursorMoveto()..
24410 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
24420 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24430 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
24440 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
24450 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
24460 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20  r) );.#if 0  /* 
24470 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65  Not required due
24480 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
24490 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61   to assert() sta
244a0 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20  tements */.  rc 
244b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
244c0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
244d0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
244e0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
244f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
24500 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
24510 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
24520 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
24530 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56  sTable );.    VV
24540 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
24550 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24560 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
24570 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
24580 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
24590 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
245a0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
245b0 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
245c0 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
245d0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
245e0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
245f0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
24600 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
24610 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
24620 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  e{.    VVA_ONLY(
24630 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
24640 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
24650 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
24660 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
24670 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
24680 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
24690 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
246a0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
246b0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
246c0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
246d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
246e0 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
246f0 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71  n==0 );.  if( sq
24700 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
24710 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
24720 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20   MAX(n,32)) ){. 
24730 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
24740 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
24750 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
24760 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
24770 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
24780 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
24790 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
247a0 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
247b0 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
247c0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
247d0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
247e0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
247f0 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
24800 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
24810 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
24820 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
24830 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
24840 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
24850 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
24860 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
24870 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
24880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24890 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
248a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
248b0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
248c0 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
248d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
248e0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
248f0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
24900 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
24910 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
24920 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
24930 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
24940 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
24950 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
24960 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
24970 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
24980 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
24990 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
249a0 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
249b0 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
249c0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
249d0 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
249e0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
249f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
24a00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
24a10 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
24a20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24a30 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
24a40 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
24a50 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
24a60 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
24a70 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
24a80 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
24a90 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
24aa0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24ab0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24ac0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24ad0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24ae0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24af0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
24b00 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
24b10 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
24b20 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
24b30 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
24b40 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
24b50 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
24b60 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
24b70 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
24b80 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
24b90 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
24ba0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
24bb0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
24bc0 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
24bd0 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
24be0 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
24bf0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
24c00 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
24c10 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
24c20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
24c30 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
24c40 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
24c50 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
24c60 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  sor, &v);.    sq
24c70 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
24c80 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
24c90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
24ca0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
24cb0 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
24cc0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24cd0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
24ce0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24cf0 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
24d00 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
24d10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24d20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
24d30 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
24d40 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  {.      pOut->fl
24d50 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
24d60 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
24d70 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
24d80 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
24d90 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
24da0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
24db0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
24dc0 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
24dd0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65  ause of CursorRe
24de0 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f  store() above */
24df0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
24e00 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
24e10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
24e20 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
24e30 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
24e40 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
24e50 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
24e60 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
24e70 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
24e80 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
24e90 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
24ea0 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
24eb0 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
24ec0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
24ed0 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
24ee0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
24ef0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24f00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24f10 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24f20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24f30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24f40 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
24f50 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
24f60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24f70 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
24f80 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
24f90 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
24fa0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
24fb0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
24fc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24fd0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50 33  e: Last P1 P2 P3
24fe0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
24ff0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
25000 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
25010 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
25020 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
25030 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
25040 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
25050 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
25060 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
25070 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
25080 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
25090 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
250a0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
250b0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
250c0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
250d0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
250e0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
250f0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
25100 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
25110 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
25120 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
25130 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
25140 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
25150 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
25160 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
25170 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
25180 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
25190 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
251a0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
251b0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
251c0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
251d0 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
251e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
251f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25200 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
25210 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
25220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25230 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25240 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25250 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25260 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25270 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
25280 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
25290 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
252a0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
252b0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
252c0 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72  3BtreeLast(pCrsr
252d0 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e  , &res);.  pC->n
252e0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
252f0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
25300 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
25310 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25320 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
25330 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
25340 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20  pOp->p3;.#ifdef 
25350 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
25360 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
25370 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
25380 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
25390 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
253a0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
253b0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
253c0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
253d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
253e0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
253f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
25400 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
25410 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
25420 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
25430 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
25440 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
25450 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
25460 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
25470 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
25480 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
25490 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
254a0 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
254b0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
254c0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
254d0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
254e0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
254f0 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
25500 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
25510 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
25520 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
25530 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
25540 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
25550 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
25560 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
25570 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
25580 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
25590 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
255a0 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
255b0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
255c0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
255d0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
255e0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
255f0 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
25600 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
25610 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
25620 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
25630 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
25640 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
25650 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
25660 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
25670 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
25680 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
25690 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
256a0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
256b0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
256c0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
256d0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
256e0 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
256f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
25700 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
25710 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
25720 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
25730 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
25740 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
25750 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
25760 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
25770 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
25780 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
25790 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
257a0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
257b0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
257c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
257d0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
257e0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
257f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
25800 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
25810 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25820 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
25830 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
25840 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
25850 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
25860 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
25870 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
25880 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
25890 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
258a0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
258b0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
258c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
258d0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
258e0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
258f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25900 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25910 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
25920 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25930 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25940 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25950 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25960 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
25980 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
25990 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
259a0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
259b0 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
259c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
259d0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
259e0 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
259f0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25a00 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25a10 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
25a20 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
25a30 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72  }else{.    pCrsr
25a40 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25a50 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
25a60 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
25a70 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
25a80 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
25a90 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
25aa0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
25ab0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25ac0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
25ad0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
25ae0 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65   (u8)res;.  asse
25af0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
25b00 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
25b10 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
25b20 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
25b30 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
25b40 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
25b50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25b60 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50  de: Next P1 P2 P
25b70 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64  3 P4 P5.**.** Ad
25b80 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
25b90 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
25ba0 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
25bb0 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
25bc0 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
25bd0 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
25be0 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
25bf0 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
25c00 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
25c10 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
25c20 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
25c30 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
25c40 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
25c50 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
25c60 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
25c70 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e   P2..**.** The N
25c80 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
25c90 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
25ca0 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65  ng an SeekGT, Se
25cb0 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52  ekGE, or.** OP_R
25cc0 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65  ewind opcode use
25cd0 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68  d to position th
25ce0 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20  e cursor.  Next 
25cf0 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a  is not allowed.*
25d00 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b  * to follow Seek
25d10 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f  LT, SeekLE, or O
25d20 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  P_Last..**.** Th
25d30 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
25d40 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
25d50 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
25d60 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75  do-table.  P1 mu
25d70 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20  st have.** been 
25d80 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20  opened prior to 
25d90 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74  this opcode or t
25da0 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20  he program will 
25db0 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  segfault..**.** 
25dc0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
25dd0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
25de0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
25df0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
25e00 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
25e10 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
25e20 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
25e30 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
25e40 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
25e50 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
25e60 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
25e70 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
25e80 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
25e90 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
25ea0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
25eb0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
25ec0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
25ed0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
25ee0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
25ef0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29  lite3BtreeNext()
25f00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
25f10 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
25f20 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
25f30 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
25f40 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
25f50 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
25f60 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
25f70 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
25f80 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
25f90 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f  v, NextIfOpen.*/
25fa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
25fb0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
25fc0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
25fd0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
25fe0 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63  st like Next exc
25ff0 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
26000 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
26010 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
26020 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f  a no-op..*/./* O
26030 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
26040 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
26050 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
26060 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
26070 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
26080 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
26090 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
260a0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
260b0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
260c0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
260d0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
260e0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
260f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
26100 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
26110 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
26120 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
26130 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
26140 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
26150 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20  .**.** The Prev 
26160 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
26170 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
26180 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  n SeekLT, SeekLE
26190 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20  , or.** OP_Last 
261a0 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
261b0 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
261c0 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74  or.  Prev is not
261d0 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
261e0 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65  ollow SeekGT, Se
261f0 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69  ekGE, or OP_Rewi
26200 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  nd..**.** The P1
26210 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
26220 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
26230 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
26240 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a  able.  If P1 is.
26250 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e  ** not open then
26260 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
26270 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
26280 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
26290 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
262a0 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
262b0 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
262c0 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
262d0 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
262e0 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
262f0 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
26300 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
26310 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
26320 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
26330 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
26340 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
26350 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
26360 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
26370 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
26380 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
26390 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
263a0 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
263b0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
263c0 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ious()..**.** If
263d0 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
263e0 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
263f0 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
26400 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
26410 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
26420 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
26430 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
26440 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  d..*/./* Opcode:
26450 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50   PrevIfOpen P1 P
26460 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
26470 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
26480 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65  ks just like Pre
26490 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  v except that if
264a0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
264b0 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
264c0 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
264d0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e  .case OP_SorterN
264e0 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20  ext: {  /* jump 
264f0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26500 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
26510 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26520 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26530 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
26540 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ) );.  res = 0;.
26550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
26560 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
26570 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f   pC, &res);.  go
26580 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61  to next_tail;.ca
26590 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  se OP_PrevIfOpen
265a0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
265b0 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70  case OP_NextIfOp
265c0 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
265d0 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  /.  if( p->apCsr
265e0 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62  [pOp->p1]==0 ) b
265f0 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
26600 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20  through */.case 
26610 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
26620 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
26630 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20  e OP_Next:      
26640 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
26650 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26660 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26670 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
26680 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41  ssert( pOp->p5<A
26690 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
266a0 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
266b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
266c0 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e  ];.  res = pOp->
266d0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  p3;.  assert( pC
266e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
266f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26700 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
26710 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20  rt( pC->pCursor 
26720 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73  );.  assert( res
26730 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26  ==0 || (res==1 &
26740 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  & pC->isTable==0
26750 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  ) );.  testcase(
26760 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73   res==1 );.  ass
26770 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26780 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
26790 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
267a0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
267b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
267c0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
267d0 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  v || pOp->p4.xAd
267e0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
267f0 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20  reePrevious );. 
26800 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
26810 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
26820 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
26830 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
26840 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
26850 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26860 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
26870 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
26880 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
26890 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20  reePrevious);.. 
268a0 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63   /* The Next opc
268b0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
268c0 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53   after SeekGT, S
268d0 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e  eekGE, and Rewin
268e0 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76  d..  ** The Prev
268f0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
26900 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c  used after SeekL
26910 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c  T, SeekLE, and L
26920 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ast. */.  assert
26930 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
26940 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Next || pOp->o
26950 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
26960 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70  Open.       || p
26970 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
26980 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekGT || pC->seek
26990 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20  Op==OP_SeekGE.  
269a0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
269b0 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c  Op==OP_Rewind ||
269c0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
269d0 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74  Found);.  assert
269e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
269f0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Prev || pOp->o
26a00 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66  pcode!=OP_PrevIf
26a10 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70  Open.       || p
26a20 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
26a30 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekLT || pC->seek
26a40 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20  Op==OP_SeekLE.  
26a50 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
26a60 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a  Op==OP_Last );..
26a70 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78    rc = pOp->p4.x
26a80 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72  Advance(pC->pCur
26a90 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74  sor, &res);.next
26aa0 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63  _tail:.  pC->cac
26ab0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
26ac0 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72  _STALE;.  VdbeBr
26ad0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30  anchTaken(res==0
26ae0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ,2);.  if( res==
26af0 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  0 ){.    pC->nul
26b00 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d  lRow = 0;.    p-
26b10 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
26b20 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  5]++;.#ifdef SQL
26b30 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
26b40 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
26b50 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
26b60 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
26b70 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
26b80 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65  terrupt;.  }else
26b90 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
26ba0 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  w = 1;.  }.  got
26bb0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
26bc0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
26bd0 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
26be0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
26bf0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26c00 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
26c10 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
26c20 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
26c30 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
26c40 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
26c50 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
26c60 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
26c70 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
26c80 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
26c90 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
26ca0 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
26cb0 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
26cc0 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
26cd0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
26ce0 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
26cf0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
26d00 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
26d10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
26d20 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
26d30 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
26d40 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
26d50 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
26d60 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
26d70 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
26d80 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
26d90 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
26da0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
26db0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
26dc0 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
26dd0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
26de0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26df0 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65  ULT bit set, the
26e00 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73  n the cursor mus
26e10 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64  t have.** just d
26e20 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68  one a seek to th
26e30 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65  e spot where the
26e40 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f   new entry is to
26e50 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a   be inserted..**
26e60 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64   This flag avoid
26e70 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61  s doing an extra
26e80 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   seek..**.** Thi
26e90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
26ea0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
26eb0 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
26ec0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
26ed0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
26ee0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
26ef0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
26f00 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
26f10 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
26f20 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
26f30 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
26f40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26f50 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26f60 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20  ;.  int nKey;.  
26f70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
26f80 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26f90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26fa0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26fb0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26fc0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26fd0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26fe0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
26ff0 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
27000 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
27010 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d  ert) );.  pIn2 =
27020 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
27030 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
27040 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
27050 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  b );.  pCrsr = p
27060 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
27070 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
27080 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
27090 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
270a0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
270b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
270c0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
270d0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
270e0 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  In2);.  if( rc==
270f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27100 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
27110 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
27120 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
27130 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
27140 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
27150 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
27160 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
27170 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
27180 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27190 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
271a0 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
271b0 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
271c0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
271d0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
271e0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
271f0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
27200 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
27210 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
27220 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
27230 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
27240 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27250 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
27260 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
27270 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
27280 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
27290 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
272a0 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
272b0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
272c0 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
272d0 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
272e0 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
272f0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
27300 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
27310 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
27320 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
27330 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
27340 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
27350 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
27360 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27370 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
27380 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
27390 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
273a0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
273b0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
273c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
273d0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
273e0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
273f0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
27400 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27410 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27420 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27430 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27440 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27450 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
27460 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
27470 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
27480 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
27490 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
274a0 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
274b0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
274c0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
274d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
274e0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
274f0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
27500 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
27510 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
27520 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
27530 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
27540 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
27550 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
27560 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63  ); }.#endif.  rc
27570 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
27580 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
27590 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
275a0 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  res);.  if( rc==
275b0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
275c0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
275d0 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
275e0 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20  te(pCrsr);.  }. 
275f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27600 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27610 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
27620 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27630 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
27640 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
27650 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
27660 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
27670 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
27680 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
27690 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
276a0 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
276b0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
276c0 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
276d0 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
276e0 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
276f0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
27700 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
27710 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
27720 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
27730 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
27740 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
27750 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
27760 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
27770 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
27780 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
27790 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
277a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43 75  * out2 */.  BtCu
277b0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
277c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
277d0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 70   i64 rowid;..  p
277e0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
277f0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
27800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27810 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27820 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27830 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27840 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27850 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
27860 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
27870 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
27880 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
27890 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
278a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
278b0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73  Table==0 );.  as
278c0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
278d0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a  edMoveto==0 );..
278e0 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
278f0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
27900 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
27910 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
27920 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
27930 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
27940 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
27950 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
27960 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52  pend for an IdxR
27970 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65  owid.  ** opcode
27980 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45  , hence the NEVE
27990 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20  R() arround the 
279a0 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74  check of the ret
279b0 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a  urn value..  */.
279c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
279d0 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
279e0 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
279f0 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
27a00 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27a10 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
27a20 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
27a30 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b  {.    rowid = 0;
27a40 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
27a50 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
27a60 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
27a70 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
27a80 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
27a90 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
27aa0 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
27ab0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
27ac0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
27ad0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27ae0 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
27af0 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70  i = rowid;.    p
27b00 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27b10 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _Int;.  }.  brea
27b20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27b30 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
27b40 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
27b50 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
27b60 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
27b70 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
27b80 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
27b90 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
27ba0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
27bb0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
27bc0 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
27bd0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
27be0 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
27bf0 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
27c00 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27c10 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27c20 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27c30 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
27c40 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
27c50 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
27c60 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
27c70 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
27c80 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
27c90 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
27ca0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
27cb0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27cc0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27cd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27ce0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
27cf0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
27d00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27d10 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
27d20 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
27d30 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
27d40 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
27d50 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
27d60 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
27d70 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
27d80 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
27d90 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
27da0 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
27db0 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
27dc0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27dd0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27de0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27df0 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
27e00 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
27e10 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27e20 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
27e30 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
27e40 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
27e50 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
27e60 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27e70 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27e80 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27e90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
27ea0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27eb0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27ec0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27ed0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27ee0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27ef0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27f00 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27f10 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27f20 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
27f30 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
27f40 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27f50 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
27f60 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
27f70 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27f80 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27f90 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27fa0 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
27fb0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
27fc0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
27fd0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
27fe0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
27ff0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
28000 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
28010 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
28020 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
28030 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
28040 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45  /* Opcode: IdxLE
28050 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
28060 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
28070 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
28080 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
28090 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
280a0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
280b0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
280c0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
280d0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
280e0 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
280f0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
28100 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
28110 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
28120 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
28130 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
28140 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
28150 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
28160 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
28170 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28180 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
28190 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
281a0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
281b0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  alue then jump.*
281c0 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
281d0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
281e0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
281f0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
28200 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20   OP_IdxLE:      
28210 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
28220 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20  ase OP_IdxGT:   
28230 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28240 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
28250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
28260 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
28270 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20  GE:  {       /* 
28280 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28290 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
282a0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
282b0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
282c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
282d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
282e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
282f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28310 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28320 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
28330 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
28340 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
28350 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
28360 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
28370 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
28380 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
28390 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
283a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
283b0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
283c0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
283d0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
283e0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
283f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
28400 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
28410 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28420 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
28430 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28440 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
28450 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28460 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
28470 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28480 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
28490 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
284a0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
284b0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
284c0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
284d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
284e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
284f0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
28500 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
28510 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
28520 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
28530 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
28540 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
28550 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28560 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
28570 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
28580 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
28590 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
285a0 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
285b0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
285c0 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
285d0 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
285e0 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
285f0 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
28600 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
28610 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
28620 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
28630 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28640 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
28650 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
28660 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
28670 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
28680 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
28690 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
286a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
286b0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
286c0 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
286d0 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
286e0 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
286f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
28700 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
28710 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
28720 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28730 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
28740 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
28750 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
28760 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
28770 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
28780 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
28790 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
287a0 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
287b0 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
287c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
287d0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
287e0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
287f0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
28800 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
28810 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
28820 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
28830 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
28840 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
28850 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
28860 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
28870 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
28880 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
28890 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
288a0 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
288b0 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
288c0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
288d0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
288e0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
288f0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
28900 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
28910 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
28920 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
28930 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
28940 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
28950 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
28960 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
28970 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
28980 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
28990 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
289a0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
289b0 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
289c0 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
289d0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
289e0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
289f0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
28a00 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
28a10 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28a20 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
28a30 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
28a40 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
28a50 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
28a60 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
28a70 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
28a80 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
28a90 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
28aa0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
28ab0 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
28ac0 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  t2 */.  int iMov
28ad0 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  ed;.  int iDb;..
28ae0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
28af0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 4f  dOnly==0 );.  pO
28b00 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
28b10 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
28b20 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
28b30 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
28b40 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
28b50 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
28b60 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
28b70 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
28b80 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
28b90 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
28ba0 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
28bb0 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  3;.    assert( D
28bc0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
28bd0 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
28be0 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20      iMoved = 0; 
28bf0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
28c00 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65   Only to silence
28c10 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
28c20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
28c30 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
28c40 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
28c50 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
28c60 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
28c70 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
28c80 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
28c90 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51  oved;.#ifndef SQ
28ca0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
28cb0 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d  CUUM.    if( rc=
28cc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d  =SQLITE_OK && iM
28cd0 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
28ce0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
28cf0 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69  Moved(db, iDb, i
28d00 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
28d10 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50  .      /* All OP
28d20 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69  _Destroy operati
28d30 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ons occur on the
28d40 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20   same btree */. 
28d50 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
28d60 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
28d70 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d  =0 || resetSchem
28d80 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20  aOnFault==iDb+1 
28d90 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63  );.      resetSc
28da0 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44  hemaOnFault = iD
28db0 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  b+1;.    }.#endi
28dc0 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  f.  }.  break;.}
28dd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65  ../* Opcode: Cle
28de0 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  ar P1 P2 P3.**.*
28df0 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
28e00 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
28e10 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
28e20 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
28e30 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
28e40 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
28e50 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
28e60 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
28e70 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
28e80 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
28e90 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
28ea0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
28eb0 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
28ec0 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
28ed0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
28ee0 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
28ef0 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
28f00 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
28f10 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
28f20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
28f30 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
28f40 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
28f50 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
28f60 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
28f70 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
28f80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33  .**.** If the P3
28f90 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
28fa0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ro, then the tab
28fb0 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d  le referred to m
28fc0 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
28fd0 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
28fe0 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
28ff0 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
29000 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
29010 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
29020 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
29030 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
29040 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
29050 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
29060 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
29070 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
29080 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
29090 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
290a0 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
290b0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
290c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
290d0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
290e0 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
290f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
29100 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
29110 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
29120 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61  Change;. .  nCha
29130 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  nge = 0;.  asser
29140 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
29150 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
29160 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
29170 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29  eeMask, pOp->p2)
29180 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
29190 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
291a0 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  e(.      db->aDb
291b0 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
291c0 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33  Op->p1, (pOp->p3
291d0 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29   ? &nChange : 0)
291e0 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  .  );.  if( pOp-
291f0 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  >p3 ){.    p->nC
29200 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65  hange += nChange
29210 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
29220 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  3>0 ){.      ass
29230 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
29240 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
29250 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
29260 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
29270 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
29280 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33      aMem[pOp->p3
29290 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65  ].u.i += nChange
292a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
292b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
292c0 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50  e: ResetSorter P
292d0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
292e0 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
292f0 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68  nts from the eph
29300 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20  emeral table or 
29310 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69  sorter.** that i
29320 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72  s open on cursor
29330 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
29340 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b  opcode only work
29350 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73  s for cursors us
29360 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61  ed for sorting a
29370 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74  nd.** opened wit
29380 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  h OP_OpenEphemer
29390 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f  al or OP_SorterO
293a0 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pen..*/.case OP_
293b0 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20  ResetSorter: {. 
293c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
293d0 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  . .  assert( pOp
293e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
293f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29400 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29410 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29420 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
29430 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20  if( pC->pSorter 
29440 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
29450 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
29460 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a  , pC->pSorter);.
29470 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
29480 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
29490 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
294a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
294b0 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
294c0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
294d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
294e0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
294f0 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
29500 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
29510 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
29520 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
29530 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
29540 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
29550 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
29560 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
29570 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
29580 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
29590 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
295a0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
295b0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
295c0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
295d0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
295e0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
295f0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
29600 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
29610 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
29620 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
29630 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
29640 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
29650 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
29660 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
29670 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
29680 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
29690 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
296a0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
296b0 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
296c0 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
296d0 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
296e0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
296f0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
29700 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
29710 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
29720 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
29730 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29740 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
29750 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
29760 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
29770 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
29780 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
29790 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
297a0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
297b0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
297c0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
297d0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
297e0 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
297f0 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
29800 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
29810 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
29820 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
29830 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
29840 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
29850 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
29860 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
29870 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
29880 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
29890 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
298a0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
298b0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
298c0 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
298d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
298e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
298f0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
29900 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
29910 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
29920 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
29930 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
29940 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
29950 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
29960 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
29970 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
29980 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
29990 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
299a0 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
299b0 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
299c0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
299d0 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
299e0 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
299f0 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
29a00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29a10 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
29a20 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
29a30 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
29a40 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
29a50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29a60 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
29a70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
29a80 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
29a90 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
29aa0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
29ab0 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
29ac0 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
29ad0 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
29ae0 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
29af0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
29b00 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
29b10 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
29b20 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
29b30 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
29b40 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
29b50 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
29b60 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
29b70 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
29b80 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
29b90 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
29ba0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
29bb0 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
29bc0 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
29bd0 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
29be0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
29bf0 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
29c00 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
29c10 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
29c20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
29c30 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
29c40 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
29c50 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
29c60 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29c70 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
29c80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
29c90 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
29ca0 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
29cb0 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
29cc0 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
29cd0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
29ce0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
29cf0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
29d00 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
29d10 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
29d20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
29d30 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
29d40 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
29d50 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
29d60 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
29d70 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
29d80 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
29d90 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
29da0 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
29db0 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
29dc0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
29dd0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
29de0 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
29df0 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
29e00 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
29e10 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
29e20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
29e30 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
29e40 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
29e50 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
29e60 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
29e70 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
29e80 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
29e90 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
29ea0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
29eb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
29ec0 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
29ed0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
29ee0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
29ef0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
29f00 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
29f10 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
29f20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
29f30 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
29f40 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
29f50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29f60 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
29f70 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29f80 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
29f90 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
29fa0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
29fb0 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
29fc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
29fd0 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
29fe0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
29ff0 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
2a000 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
2a010 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2a020 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2a030 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
2a040 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
2a050 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2a060 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
2a070 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2a080 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2a090 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
2a0a0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
2a0b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
2a0c0 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
2a0d0 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
2a0e0 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
2a0f0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
2a100 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
2a110 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
2a120 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
2a130 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
2a140 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
2a150 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
2a160 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
2a170 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
2a180 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
2a190 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
2a1a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a1b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a1c0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
2a1d0 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
2a1e0 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
2a1f0 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
2a200 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
2a210 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a220 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
2a230 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
2a240 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
2a250 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2a260 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2a270 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2a280 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2a290 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2a2a0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2a2b0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2a2c0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2a2d0 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2a2e0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2a2f0 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2a300 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2a310 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2a320 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2a330 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2a340 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2a350 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2a360 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2a370 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2a380 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2a390 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2a3a0 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2a3b0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2a3c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a3d0 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2a3e0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2a3f0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2a400 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2a410 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2a420 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2a430 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2a440 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2a450 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2a460 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2a470 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2a480 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2a490 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2a4a0 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2a4b0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2a4c0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a4d0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a4e0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a4f0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a500 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a510 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2a520 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a530 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2a540 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a550 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2a560 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2a570 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2a580 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2a590 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2a5a0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2a5b0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2a5c0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2a5d0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2a5e0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2a5f0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2a600 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2a610 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2a620 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2a630 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2a640 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2a650 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2a660 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a670 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a680 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a690 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a6a0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a6b0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2a6c0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2a6d0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2a6e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2a6f0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2a700 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2a710 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2a720 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2a730 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2a740 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
2a750 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2a760 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2a770 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2a780 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2a790 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2a7a0 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2a7b0 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2a7c0 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2a7d0 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2a7e0 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2a7f0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2a800 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2a810 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2a820 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2a830 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2a840 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2a850 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2a860 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2a870 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2a880 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2a890 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2a8a0 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2a8b0 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2a8c0 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2a8d0 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2a8e0 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2a8f0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2a900 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2a910 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2a920 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2a930 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a940 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
2a950 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
2a960 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
2a970 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
2a980 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
2a990 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
2a9a0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
2a9b0 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
2a9c0 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
2a9d0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2a9e0 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
2a9f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2aa00 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
2aa10 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
2aa20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
2aa30 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2aa40 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
2aa50 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
2aa60 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
2aa70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2aa80 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
2aa90 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
2aaa0 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
2aab0 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
2aac0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
2aad0 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
2aae0 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
2aaf0 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
2ab00 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
2ab10 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2ab20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2ab30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2ab40 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2ab50 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2ab60 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2ab70 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2ab80 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2ab90 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2aba0 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2abb0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2abc0 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2abd0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2abe0 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2abf0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
2ac00 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
2ac10 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2ac20 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
2ac30 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
2ac40 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
2ac50 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2ac60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ac70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2ac80 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2ac90 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
2aca0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2acb0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2acc0 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
2acd0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
2ace0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2acf0 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2ad00 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
2ad10 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ad20 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
2ad30 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
2ad40 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
2ad50 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
2ad60 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
2ad70 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
2ad80 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
2ad90 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2ada0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2adb0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2adc0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2add0 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2ade0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2adf0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2ae00 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
2ae10 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae30 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2ae40 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
2ae50 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
2ae60 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
2ae70 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
2ae80 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
2ae90 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2aea0 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
2aeb0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2aec0 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
2aed0 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
2aee0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2aef0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2af00 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2af10 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
2af20 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2af30 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
2af40 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2af50 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
2af60 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2af70 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
2af80 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2af90 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2afa0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2afb0 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
2afc0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
2afd0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2afe0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
2aff0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2b000 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2b010 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2b020 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2b030 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2b040 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2b050 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2b060 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2b070 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2b080 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2b090 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2b0a0 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2b0b0 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2b0c0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b0d0 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2b0e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2b0f0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2b100 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2b110 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2b120 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2b130 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2b140 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b150 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2b160 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2b170 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b180 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2b190 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2b1a0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2b1b0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b1c0 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2b1d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b1e0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2b1f0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2b200 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
2b210 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
2b220 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
2b230 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
2b240 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2b250 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
2b260 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
2b270 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
2b280 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2b290 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
2b2a0 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
2b2b0 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
2b2c0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2b2d0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
2b2e0 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
2b2f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b300 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
2b310 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
2b320 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b330 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2b340 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b350 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
2b360 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
2b370 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b380 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
2b390 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
2b3a0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
2b3b0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2b3c0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
2b3d0 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  1);.    VdbeBran
2b3e0 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
2b3f0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2b400 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2b410 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
2b420 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
2b430 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
2b440 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
2b450 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2b460 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71  ken(0,2);.    sq
2b470 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2b480 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
2b490 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  p3], val);.  }. 
2b4a0 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2b4b0 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2b4c0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
2b4d0 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
2b4e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2b4f0 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
2b500 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
2b510 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
2b520 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
2b530 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2b540 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
2b550 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
2b560 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
2b570 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
2b580 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
2b590 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
2b5a0 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
2b5b0 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
2b5c0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
2b5d0 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
2b5e0 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
2b5f0 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
2b600 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
2b610 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
2b620 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
2b630 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
2b640 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
2b650 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
2b660 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
2b670 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
2b680 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
2b690 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
2b6a0 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
2b6b0 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
2b6c0 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2b6d0 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2b6e0 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2b6f0 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2b700 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
2b710 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
2b720 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
2b730 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
2b740 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2b750 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
2b760 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
2b770 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
2b780 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
2b790 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
2b7a0 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
2b7b0 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
2b7c0 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
2b7d0 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
2b7e0 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
2b7f0 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
2b800 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
2b810 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
2b820 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
2b830 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
2b840 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
2b850 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
2b860 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
2b870 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
2b880 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
2b890 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
2b8a0 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
2b8b0 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
2b8c0 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
2b8d0 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
2b8e0 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
2b8f0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2b900 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
2b910 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
2b920 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
2b930 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
2b940 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
2b950 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
2b960 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2b970 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b980 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
2b990 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
2b9a0 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
2b9b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b9c0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2b9d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
2b9e0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
2b9f0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
2ba00 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
2ba10 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2ba20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
2ba30 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
2ba40 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
2ba50 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
2ba60 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
2ba70 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
2ba80 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
2ba90 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
2baa0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2bab0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2bac0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2bad0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2bae0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2baf0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2bb00 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2bb10 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
2bb20 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2bb30 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
2bb40 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
2bb50 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
2bb60 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
2bb70 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
2bb80 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
2bb90 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
2bba0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2bbb0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2bbc0 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
2bbd0 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
2bbe0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2bbf0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  ;.  }.  if( iSet
2bc00 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
2bc10 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2bc20 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2bc30 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
2bc40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2bc50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bc60 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
2bc70 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
2bc80 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2bc90 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
2bca0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
2bcb0 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
2bcc0 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
2bcd0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
2bce0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2bcf0 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
2bd00 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
2bd10 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
2bd20 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
2bd30 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
2bd40 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
2bd50 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
2bd60 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
2bd70 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2bd80 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2bd90 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2bda0 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
2bdb0 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
2bdc0 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
2bdd0 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
2bde0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2bdf0 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
2be00 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
2be10 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
2be20 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
2be30 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
2be40 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
2be50 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
2be60 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
2be70 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
2be80 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2be90 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
2bea0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
2beb0 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
2bec0 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
2bed0 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
2bee0 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
2bef0 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
2bf00 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
2bf10 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2bf20 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
2bf30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2bf40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
2bf50 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
2bf60 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2bf70 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
2bf80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
2bf90 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
2bfa0 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
2bfb0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2bfc0 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
2bfd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2bfe0 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
2bff0 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
2c000 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c020 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
2c030 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
2c040 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
2c050 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
2c060 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
2c070 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
2c080 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
2c090 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
2c0a0 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
2c0b0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
2c0c0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
2c0d0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
2c0e0 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
2c0f0 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
2c100 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
2c110 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
2c120 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
2c130 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
2c140 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
2c150 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
2c160 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2c170 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2c180 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
2c190 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
2c1a0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
2c1b0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2c1c0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2c1d0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2c1e0 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
2c1f0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
2c200 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
2c210 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
2c220 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
2c230 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
2c240 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
2c250 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
2c260 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
2c270 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
2c280 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
2c290 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
2c2a0 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
2c2b0 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
2c2c0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2c2d0 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
2c2e0 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
2c2f0 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
2c300 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
2c310 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
2c320 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
2c330 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
2c340 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
2c350 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
2c360 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
2c370 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
2c380 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
2c390 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
2c3a0 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
2c3b0 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
2c3c0 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
2c3d0 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
2c3e0 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
2c3f0 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
2c400 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
2c410 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
2c420 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
2c430 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
2c440 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
2c450 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
2c460 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2c470 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
2c480 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
2c490 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2c4a0 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
2c4b0 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
2c4c0 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
2c4d0 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
2c4e0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
2c4f0 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
2c500 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2c510 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
2c520 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2c530 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f  ErrMsg, db, "too
2c540 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
2c550 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
2c560 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  n");.    break;.
2c570 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2c580 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2c590 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2c5a0 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2c5b0 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2c5c0 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2c5d0 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2c5e0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2c5f0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2c600 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2c610 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2c620 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2c630 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2c640 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2c650 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2c660 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2c670 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2c680 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2c690 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2c6a0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2c6b0 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2c6c0 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2c6d0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2c6e0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2c6f0 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
2c700 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
2c710 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
2c720 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
2c730 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
2c740 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
2c750 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
2c760 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
2c770 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
2c780 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
2c790 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
2c7a0 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
2c7b0 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
2c7c0 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
2c7d0 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
2c7e0 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
2c7f0 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
2c800 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65  >nCsr;.    nByte
2c810 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
2c820 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
2c830 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
2c840 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2c860 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
2c870 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2c880 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
2c890 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2c8a0 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
2c8b0 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
2c8c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2c8d0 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
2c8e0 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
2c8f0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2c900 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2c910 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2c920 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
2c930 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
2c940 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
2c950 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
2c960 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
2c970 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2c980 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2c990 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2c9a0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2c9b0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2c9c0 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2c9d0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
2c9e0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2c9f0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2ca00 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2ca10 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2ca20 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2ca30 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2ca40 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2ca50 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2ca60 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2ca70 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2ca80 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2ca90 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2caa0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2cab0 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2cac0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2cad0 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2cae0 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2caf0 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23   p->nOnceFlag;.#
2cb00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2cb10 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2cb20 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
2cb30 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
2cb40 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
2cb50 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2cb60 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2cb70 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2cb80 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2cb90 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2cba0 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2cbb0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2cbc0 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2cbd0 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
2cbe0 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2cbf0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2cc00 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2cc10 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2cc20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2cc30 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2cc40 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2cc50 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2cc60 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2cc70 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2cc80 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2cc90 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70   assert( (int)(p
2cca0 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d  Op - aOp)==pFram
2ccb0 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
2ccc0 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
2ccd0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
2cce0 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
2ccf0 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
2cd00 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
2cd10 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
2cd20 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
2cd30 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65  Frame->nDbChange
2cd40 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67   = p->db->nChang
2cd50 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  e;.  p->nChange 
2cd60 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2cd70 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2cd80 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56  aMem = aMem = &V
2cd90 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2cda0 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d  me)[-1];.  p->nM
2cdb0 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
2cdc0 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
2cdd0 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
2cde0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
2cdf0 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
2ce00 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
2ce10 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70  [p->nMem+1];.  p
2ce20 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2ce30 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2ce40 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2ce50 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2ce60 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2ce70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2ce80 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2ce90 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2cea0 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51  nOnce;.#ifdef SQ
2ceb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2cec0 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
2ced0 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
2cee0 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  dif.  pOp = &aOp
2cef0 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  [-1];.  memset(p
2cf00 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2cf10 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2cf20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2cf30 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2cf40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2cf50 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2cf60 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2cf70 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2cf80 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2cf90 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2cfa0 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2cfb0 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2cfc0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2cfd0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2cfe0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2cff0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2d000 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2d010 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2d020 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2d030 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2d040 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2d050 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2d060 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2d070 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2d080 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2d090 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2d0a0 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2d0b0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2d0c0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2d0d0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2d0e0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2d0f0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2d100 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2d110 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2d120 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2d130 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2d140 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2d150 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
2d160 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
2d170 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
2d180 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2d190 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
2d1a0 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
2d1b0 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
2d1c0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
2d1d0 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
2d1e0 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
2d1f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d200 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
2d210 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
2d220 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
2d230 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2d240 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2d250 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
2d260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2d270 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
2d280 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
2d290 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d2a0 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
2d2b0 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
2d2c0 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
2d2d0 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
2d2e0 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
2d2f0 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
2d300 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
2d310 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
2d320 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2d330 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2d340 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
2d350 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
2d360 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2d370 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
2d380 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
2d390 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
2d3a0 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2d3b0 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
2d3c0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2d3d0 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
2d3e0 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
2d3f0 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
2d400 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
2d410 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
2d420 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
2d430 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2d440 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
2d450 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2d460 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
2d470 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
2d480 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2d490 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
2d4a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2d4b0 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
2d4c0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2d4d0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
2d4e0 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
2d4f0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
2d500 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
2d510 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2d520 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2d530 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
2d540 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
2d550 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2d560 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2d570 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2d580 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
2d590 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
2d5a0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2d5b0 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
2d5c0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2d5d0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2d5e0 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
2d5f0 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
2d600 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
2d610 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
2d620 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
2d630 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
2d640 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2d650 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
2d660 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
2d670 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
2d680 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2d690 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2d6a0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
2d6b0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
2d6c0 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
2d6d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2d6e0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
2d6f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
2d700 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2d710 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d720 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2d730 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
2d740 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
2d750 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
2d760 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
2d770 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2d780 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
2d790 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
2d7a0 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2d7b0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2d7c0 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
2d7d0 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2d7e0 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2d7f0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2d800 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
2d810 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
2d820 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2d830 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2d840 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2d850 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
2d860 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2d870 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
2d880 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
2d890 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2d8a0 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
2d8b0 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
2d8c0 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
2d8d0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
2d8e0 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
2d8f0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
2d900 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
2d910 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
2d920 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
2d930 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
2d940 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
2d950 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
2d960 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
2d970 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2d980 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
2d990 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
2d9a0 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
2d9b0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2d9c0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
2d9d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
2d9e0 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2d9f0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2da00 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
2da10 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
2da20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
2da30 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
2da40 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
2da50 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
2da60 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
2da70 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
2da80 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
2da90 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
2daa0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
2dab0 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
2dac0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2dad0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
2dae0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
2daf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
2db00 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2db10 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
2db20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2db30 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
2db40 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2db50 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
2db60 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2db70 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
2db80 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
2db90 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
2dba0 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
2dbb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2dbc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2dbd0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2dbe0 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
2dbf0 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a  e: IfPos P1 P2 *
2dc00 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2dc10 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74  : if r[P1]>0 got
2dc20 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2dc30 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2dc40 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
2dc50 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2dc60 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2dc70 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2dc80 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64 0a 2a  jump to P2 and.*
2dc90 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65 72 61  * add the litera
2dca0 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20 72 65  l value P3 to re
2dcb0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2dcc0 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
2dcd0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2dce0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2dcf0 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
2dd00 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
2dd10 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
2dd20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
2dd30 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2dd40 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2dd50 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2dd60 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2dd70 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2dd80 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2dd90 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2dda0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2ddb0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
2ddc0 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
2ddd0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2dde0 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2ddf0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2de00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2de10 65 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  eg P1 P2 P3 * *.
2de20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2de30 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d  1]+=P3, if r[P1]
2de40 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  <0 goto P2.**.**
2de50 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2de60 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2de70 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2de80 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c  al P3 to the val
2de90 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  ue in.** registe
2dea0 72 20 50 31 20 74 68 65 6e 20 69 66 20 74 68 65  r P1 then if the
2deb0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2dec0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2ded0 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
2dee0 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50   P2. .*/.case OP
2def0 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2df00 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2df10 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2df20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2df30 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2df40 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2df50 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2df60 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  3;.  VdbeBranchT
2df70 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
2df80 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2df90 2d 3e 75 2e 69 3c 30 20 29 20 67 6f 74 6f 20 6a  ->u.i<0 ) goto j
2dfa0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2dfb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2dfc0 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
2dfd0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2dfe0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
2dff0 30 20 74 68 65 6e 20 72 5b 50 31 5d 2b 3d 50 33  0 then r[P1]+=P3
2e000 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
2e010 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2e020 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2e030 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ger.  If the con
2e040 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
2e050 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61   P1 is.** initia
2e060 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65  lly nonzero, the
2e070 6e 20 61 64 64 20 50 33 20 74 6f 20 50 31 20 61  n add P3 to P1 a
2e080 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  nd jump to P2.  
2e090 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
2e0a0 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 7a  s.** initially z
2e0b0 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e  ero, leave it un
2e0c0 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c  changed and fall
2e0d0 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
2e0e0 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20  e OP_IfNotZero: 
2e0f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2e100 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2e110 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2e120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2e130 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2e140 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2e150 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
2e160 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2e170 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49  ->u.i ){.     pI
2e180 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2e190 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75  p3;.     goto ju
2e1a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2e1b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e1c0 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
2e1d0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2e1e0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
2e1f0 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
2e200 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2e210 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
2e220 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
2e230 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
2e240 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  in register P1.*
2e250 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2e260 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
2e270 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
2e280 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
2e290 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
2e2a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2e2b0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2e2c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2e2d0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2e2e0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2e2f0 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
2e300 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2e310 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2e320 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2e330 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
2e340 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2e350 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  }.../* Opcode: J
2e360 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50  umpZeroIncr P1 P
2e370 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2e380 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b  sis: if (r[P1]++
2e390 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a  )==0 ) goto P2.*
2e3a0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2e3b0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2e3c0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
2e3d0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2e3e0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65   initially.** ze
2e3f0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
2e400 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20   P2.  Increment 
2e410 72 65 67 69 73 74 65 72 20 50 31 20 72 65 67 61  register P1 rega
2e420 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2e430 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20  r or.** not the 
2e440 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a  jump is taken..*
2e450 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65  /.case OP_JumpZe
2e460 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20  roIncr: {       
2e470 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2e480 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2e490 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e4a0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2e4b0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2e4c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2e4d0 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
2e4e0 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b   if( (pIn1->u.i+
2e4f0 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  +)==0 ) goto jum
2e500 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2e510 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e520 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2e530 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2e540 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2e550 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2e560 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2e570 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2e580 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2e590 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2e5a0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2e5b0 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2e5c0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2e5d0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2e5e0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2e5f0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2e600 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2e610 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2e620 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2e630 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2e640 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2e650 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2e660 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2e670 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2e680 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2e690 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2e6a0 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2e6b0 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c 69  .  Mem t;.  sqli
2e6c0 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2e6d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2e6e0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2e6f0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2e700 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2e710 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2e720 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2e730 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2e740 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2e750 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2e760 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2e770 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2e780 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2e790 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2e7a0 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2e7b0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2e7c0 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
2e7d0 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
2e7e0 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
2e7f0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2e800 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2e810 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2e820 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
2e830 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2e840 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
2e850 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e860 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d  Init(&t, db, MEM
2e870 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70 4f  _Null);.  ctx.pO
2e880 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e 69  ut = &t;.  ctx.i
2e890 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74  sError = 0;.  ct
2e8a0 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 63  x.pVdbe = p;.  c
2e8b0 74 78 2e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70  tx.iOp = (int)(p
2e8c0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 63 74 78  Op - aOp);.  ctx
2e8d0 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2e8e0 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74   (ctx.pFunc->xSt
2e8f0 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  ep)(&ctx, n, apV
2e900 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
2e910 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
2e920 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
2e930 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2e940 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2e950 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2e960 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2e970 74 28 26 74 29 29 3b 0a 20 20 20 20 72 63 20 3d  t(&t));.    rc =
2e980 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
2e990 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70  }.  if( ctx.skip
2e9a0 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65  Flag ){.    asse
2e9b0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2e9c0 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2e9d0 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31  ;.    i = pOp[-1
2e9e0 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20  ].p1;.    if( i 
2e9f0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
2ea00 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
2ea10 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  ], 1);.  }.  sql
2ea20 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2ea30 73 65 28 26 74 29 3b 0a 20 20 62 72 65 61 6b 3b  se(&t);.  break;
2ea40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2ea50 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
2ea60 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2ea70 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
2ea80 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
2ea90 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
2eaa0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2eab0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
2eac0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
2ead0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
2eae0 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
2eaf0 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
2eb00 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
2eb10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2eb20 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
2eb30 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
2eb40 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
2eb50 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2eb60 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
2eb70 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
2eb80 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
2eb90 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
2eba0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
2ebb0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
2ebc0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
2ebd0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
2ebe0 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
2ebf0 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
2ec00 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
2ec10 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
2ec20 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
2ec30 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
2ec40 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
2ec50 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
2ec60 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
2ec70 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
2ec80 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
2ec90 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
2eca0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
2ecb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
2ecc0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2ecd0 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
2ece0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ecf0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
2ed00 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
2ed10 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
2ed20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ed30 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
2ed40 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
2ed50 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
2ed60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2ed70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ed80 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2ed90 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2eda0 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
2edb0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2edc0 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
2edd0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
2ede0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2edf0 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
2ee00 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2ee10 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
2ee20 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
2ee30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
2ee40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ee50 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
2ee60 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
2ee70 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
2ee80 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
2ee90 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
2eea0 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
2eeb0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
2eec0 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
2eed0 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
2eee0 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
2eef0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
2ef00 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
2ef10 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
2ef20 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2ef30 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2ef40 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2ef50 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2ef60 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2ef70 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2ef80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2ef90 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2efa0 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2efb0 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2efc0 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2efd0 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2efe0 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2eff0 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2f000 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2f010 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2f020 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2f030 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2f040 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2f050 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2f060 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2f070 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2f080 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2f090 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2f0a0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2f0c0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2f0d0 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2f100 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f120 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2f130 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
2f140 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f150 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
2f160 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
2f170 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
2f180 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f190 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2f1a0 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
2f1b0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2f1c0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2f1d0 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
2f1e0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2f1f0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
2f200 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
2f210 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2f220 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
2f230 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
2f240 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2f250 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2f260 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2f270 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2f280 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2f290 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2f2a0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2f2b0 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2f2c0 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2f2d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2f2e0 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2f2f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2f300 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2f310 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2f320 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2f330 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2f340 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f350 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2f360 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2f370 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2f380 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2f390 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2f3a0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2f3b0 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2f3c0 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2f3d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2f3e0 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2f3f0 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2f400 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2f410 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2f420 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2f430 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2f440 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2f450 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2f460 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2f470 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2f480 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2f490 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2f4a0 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2f4b0 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2f4c0 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2f4d0 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2f4e0 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2f4f0 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2f500 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2f510 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2f520 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2f530 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ut2 */.  Btree *
2f540 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBt;            
2f550 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65           /* Btre
2f560 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72  e to change jour
2f570 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20  nal mode of */. 
2f580 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20   Pager *pPager; 
2f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5a0 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69   /* Pager associ
2f5b0 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f  ated with pBt */
2f5c0 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20  .  int eNew;    
2f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5e0 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61     /* New journa
2f5f0 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  l mode */.  int 
2f600 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  eOld;           
2f610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2f620 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d  he old journal m
2f630 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ode */.#ifndef S
2f640 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2f650 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
2f660 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
2f670 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
2f680 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
2f690 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ager */.#endif..
2f6a0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2f6b0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2f6c0 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70  .  eNew = pOp->p
2f6d0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65  3;.  assert( eNe
2f6e0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f6f0 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20  MODE_DELETE .   
2f700 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2f710 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
2f720 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20  RUNCATE .       
2f730 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f740 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2f750 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ST .       || eN
2f760 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f770 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20  LMODE_OFF.      
2f780 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2f790 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2f7a0 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  RY.       || eNe
2f7b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f7c0 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20  MODE_WAL.       
2f7d0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f7e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2f7f0 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
2f800 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2f810 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2f820 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2f830 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
2f840 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2f850 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50  p->p1].pBt;.  pP
2f860 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
2f870 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
2f880 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50   eOld = sqlite3P
2f890 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerGetJournalMo
2f8a0 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66  de(pPager);.  if
2f8b0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2f8c0 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
2f8d0 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
2f8e0 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67   if( !sqlite3Pag
2f8f0 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72  erOkToChangeJour
2f900 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20  nalMode(pPager) 
2f910 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a  ) eNew = eOld;..
2f920 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f930 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e  MIT_WAL.  zFilen
2f940 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ame = sqlite3Pag
2f950 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65  erFilename(pPage
2f960 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  r, 1);..  /* Do 
2f970 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
2f980 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
2f990 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
2f9a0 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
2f9b0 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
2f9c0 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
2f9d0 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
2f9e0 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
2f9f0 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65   .  */.  if( eNe
2fa00 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2fa10 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28  MODE_WAL.   && (
2fa20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2fa30 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20  zFilename)==0   
2fa40 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20          /* Temp 
2fa50 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c  file */.       |
2fa60 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57  | !sqlite3PagerW
2fa70 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67  alSupported(pPag
2fa80 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61  er))   /* No sha
2fa90 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f  red-memory suppo
2faa0 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65  rt */.  ){.    e
2fab0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2fac0 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f  .  if( (eNew!=eO
2fad0 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d  ld).   && (eOld=
2fae0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2faf0 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d  DE_WAL || eNew==
2fb00 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2fb10 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20  E_WAL).  ){.    
2fb20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
2fb30 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  mit || db->nVdbe
2fb40 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20  Read>1 ){.      
2fb50 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2fb60 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2fb70 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2fb80 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2fb90 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2fba0 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2fbb0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2fbc0 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2fbd0 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2fbe0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2fbf0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2fc00 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2fc10 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2fc20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2fc30 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2fc40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2fc50 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2fc60 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2fc70 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2fc80 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2fc90 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2fca0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2fcb0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2fcc0 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2fcd0 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2fce0 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2fcf0 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2fd00 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2fd10 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2fd20 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2fd30 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2fd40 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2fd50 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2fd60 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2fd70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2fd80 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2fd90 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2fda0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2fdb0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          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 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2fdf0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2fe00 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2fe10 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2fe20 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2fe30 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2fe40 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2fe50 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2fe60 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2fe70 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2fe80 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2fe90 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2fea0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2feb0 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2fec0 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2fed0 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2fee0 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2fef0 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2ff00 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2ff10 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2ff20 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2ff30 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2ff40 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2ff50 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2ff60 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2ff70 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2ff80 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2ff90 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2ffa0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ffb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2ffc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ffd0 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2ffe0 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2fff0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
30000 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
30010 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
30020 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
30030 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
30040 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
30050 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
30060 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
30070 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
30080 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
30090 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
300a0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
300b0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
300c0 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
300d0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
300e0 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
300f0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
30100 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
30110 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
30120 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
30130 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
30140 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
30150 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
30160 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
30170 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
30180 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
30190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
301a0 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
301b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
301c0 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
301d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
301e0 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
301f0 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
30200 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
30210 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
30220 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
30230 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
30240 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
30250 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
30260 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
30270 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
30280 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
30290 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
302a0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
302b0 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
302c0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
302d0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
302e0 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
302f0 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
30300 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
30310 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
30320 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
30330 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
30340 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
30350 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
30360 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
30370 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
30380 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
30390 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
303a0 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
303b0 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
303c0 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
303d0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
303e0 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
303f0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
30400 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
30410 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
30420 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
30430 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
30440 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
30450 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30460 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
30470 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
30480 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
30490 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
304a0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
304b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
304c0 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
304d0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
304e0 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
304f0 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
30500 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
30510 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
30520 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
30530 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30540 44 4f 4e 45 20 29 7b 0a 20 20 20 20 72 63 20 3d  DONE ){.    rc =
30550 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
30560 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
30570 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30580 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
30590 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
305a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
305b0 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
305c0 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72  tements to expir
305d0 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69  e.  When an expi
305e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
305f0 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69   is executed usi
30600 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ng sqlite3_step(
30610 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72  ) it will either
30620 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
30630 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65  * reprepare itse
30640 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72  lf (if it was or
30650 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64  iginally created
30660 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
30670 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20  repare_v2()).** 
30680 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20  or it will fail 
30690 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45  with SQLITE_SCHE
306a0 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  MA..** .** If P1
306b0 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
306c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
306d0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
306e0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
306f0 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
30700 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
30710 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
30720 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a   is expired..*/.
30730 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
30740 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
30750 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
30760 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
30770 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
30780 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
30790 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
307a0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
307b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
307c0 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
307d0 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
307e0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
307f0 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50   Synopsis: iDb=P
30800 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d  1 root=P2 write=
30810 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20  P3.**.** Obtain 
30820 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
30830 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
30840 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
30850 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
30860 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
30870 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
30880 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
30890 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
308a0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
308b0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
308c0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
308d0 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
308e0 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
308f0 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
30900 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
30910 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
30920 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
30930 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
30940 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
30950 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
30960 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
30970 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
30980 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
30990 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
309a0 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
309b0 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
309c0 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
309d0 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
309e0 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
309f0 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
30a00 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
30a10 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
30a20 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
30a30 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
30a40 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
30a50 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
30a60 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
30a70 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
30a80 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
30a90 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
30aa0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
30ab0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
30ac0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
30ad0 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65   p1) );.    asse
30ae0 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
30af0 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
30b00 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
30b10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
30b20 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
30b30 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
30b40 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
30b50 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
30b60 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
30b70 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
30b80 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
30b90 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
30ba0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
30bb0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
30bc0 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
30bd0 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
30be0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
30bf0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30c00 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
30c10 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
30c20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30c30 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
30c40 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
30c50 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30c60 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
30c70 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
30c80 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
30c90 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
30ca0 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
30cb0 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
30cc0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
30cd0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
30ce0 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
30cf0 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
30d00 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
30d10 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
30d20 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
30d30 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
30d40 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
30d50 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
30d60 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
30d70 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
30d80 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
30d90 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
30da0 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
30db0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
30dc0 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
30dd0 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
30de0 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
30df0 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
30e00 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30e10 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
30e20 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30e30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
30e40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
30e50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30e60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30e70 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
30e80 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20  reate P1 P2 * * 
30e90 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20  *.**.** P2 is a 
30ea0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f  register that ho
30eb0 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
30ec0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
30ed0 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  in database .** 
30ee0 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
30ef0 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20  eate method for 
30f00 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
30f10 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
30f20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  {.  Mem sMem;   
30f30 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
30f40 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
30f50 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
30f60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
30f70 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  zTab;  /* Name o
30f80 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
30f90 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74  ble */..  memset
30fa0 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
30fb0 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d  f(sMem));.  sMem
30fc0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42  .db = db;.  /* B
30fd0 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c 77  ecause P2 is alw
30fe0 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74 72  ays a static str
30ff0 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73  ing, it is impos
31000 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20  sible for the.  
31010 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
31020 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20  mCopy() to fail 
31030 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  */.  assert( (aM
31040 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
31050 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20  s & MEM_Str)!=0 
31060 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  );.  assert( (aM
31070 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
31080 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21  s & MEM_Static)!
31090 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
310a0 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
310b0 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70  &sMem, &aMem[pOp
310c0 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74  ->p2]);.  assert
310d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
310e0 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e  );.  zTab = (con
310f0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
31100 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65  _value_text(&sMe
31110 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54  m);.  assert( zT
31120 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  ab || db->malloc
31130 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20  Failed );.  if( 
31140 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d  zTab ){.    rc =
31150 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
31160 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
31170 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45  p1, zTab, &p->zE
31180 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71  rrMsg);.  }.  sq
31190 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
311a0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 62 72  ase(&sMem);.  br
311b0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
311c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
311d0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
311e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
311f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
31200 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
31210 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
31220 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
31230 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
31240 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
31250 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
31260 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
31270 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
31280 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
31290 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e  estroy: {.  db->
312a0 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72  nVDestroy++;.  r
312b0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
312c0 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
312d0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
312e0 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  z);.  db->nVDest
312f0 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a  roy--;.  break;.
31300 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31310 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31320 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31340 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31350 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
31360 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
31370 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
31380 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
31390 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
313a0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
313b0 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
313c0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
313d0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
313e0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
313f0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
31400 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
31410 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
31420 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
31430 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
31440 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
31450 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
31460 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
31470 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
31480 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
31490 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
314a0 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
314b0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
314c0 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  pCur = 0;.  pVta
314d0 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70  bCursor = 0;.  p
314e0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
314f0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
31500 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
31510 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
31520 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
31530 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
31540 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  D;.    break;.  
31550 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
31560 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
31570 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
31580 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
31590 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69  bCursor);.  sqli
315a0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
315b0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
315c0 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
315d0 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69  rc ){.    /* Ini
315e0 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
315f0 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
31600 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56   class */.    pV
31610 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
31620 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f   = pVtab;..    /
31630 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
31640 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
31650 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c  */.    pCur = al
31660 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
31670 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
31680 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72  0);.    if( pCur
31690 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e   ){.      pCur->
316a0 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56  pVtabCursor = pV
316b0 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  tabCursor;.     
316c0 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a   pVtab->nRef++;.
316d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
316e0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c   assert( db->mal
316f0 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
31700 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
31710 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
31720 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
31730 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  em;.    }.  }.  
31740 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
31750 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
31760 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
31770 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31780 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
31790 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
317a0 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
317b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
317c0 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
317d0 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
317e0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
317f0 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
31800 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
31810 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
31820 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
31830 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
31840 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
31850 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
31860 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
31870 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
31880 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
31890 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
318a0 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
318b0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
318c0 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
318d0 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
318e0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
318f0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
31900 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
31910 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
31920 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
31930 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
31940 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
31950 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
31960 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
31970 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
31980 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
31990 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
319a0 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
319b0 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
319c0 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
319d0 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
319e0 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
319f0 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
31a00 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
31a10 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
31a20 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
31a30 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
31a40 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
31a50 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
31a60 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
31a70 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
31a80 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
31a90 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
31aa0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
31ab0 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
31ac0 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
31ad0 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
31ae0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
31af0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
31b00 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
31b10 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
31b20 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
31b30 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
31b40 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
31b50 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
31b60 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
31b70 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
31b80 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
31b90 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
31ba0 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
31bb0 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
31bc0 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  uery = &aMem[pOp
31bd0 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
31be0 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
31bf0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
31c00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
31c10 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51  t( memIsValid(pQ
31c20 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53  uery) );.  REGIS
31c30 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
31c40 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
31c50 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
31c60 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
31c70 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
31c80 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
31c90 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
31ca0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
31cb0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
31cc0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
31cd0 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
31ce0 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
31cf0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
31d00 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
31d10 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
31d20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
31d30 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
31d40 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
31d50 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
31d60 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
31d70 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
31d80 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
31d90 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b  od */.  res = 0;
31da0 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70  .  apArg = p->ap
31db0 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30  Arg;.  for(i = 0
31dc0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
31dd0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
31de0 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a  pArgc[i+1];.  }.
31df0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
31e00 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72  xFilter(pVtabCur
31e10 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  sor, iQuery, pOp
31e20 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
31e30 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Arg);.  sqlite3V
31e40 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
31e50 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
31e60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
31e70 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
31e80 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43  ule->xEof(pVtabC
31e90 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 43  ursor);.  }.  pC
31ea0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
31eb0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
31ec0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
31ed0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
31ee0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
31ef0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31f00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31f10 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
31f20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31f30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
31f40 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
31f50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
31f60 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
31f70 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
31f80 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
31f90 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
31fa0 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
31fb0 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
31fc0 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
31fd0 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
31fe0 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
31ff0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
32000 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
32010 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
32020 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
32030 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
32040 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
32050 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
32060 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
32070 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
32080 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
32090 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
320a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
320b0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
320c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
320d0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
320e0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
320f0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
32100 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
32110 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
32120 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
32130 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
32140 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
32150 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
32160 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
32170 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
32180 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
32190 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
321a0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
321b0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
321c0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
321d0 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
321e0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
321f0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
32200 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75  ;.  sContext.pOu
32210 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d  t = pDest;.  Mem
32220 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
32230 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
32240 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
32250 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
32260 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
32270 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
32280 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
32290 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
322a0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
322b0 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
322c0 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
322d0 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
322e0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
322f0 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
32300 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
32310 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
32320 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
32330 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
32340 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
32350 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
32360 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
32370 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
32380 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32390 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
323a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
323b0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
323c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
323d0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
323e0 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
323f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
32400 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
32410 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
32420 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
32430 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
32440 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
32450 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
32460 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
32470 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
32480 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
32490 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
324a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
324b0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
324c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
324d0 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
324e0 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
324f0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
32500 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
32510 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
32520 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
32530 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
32540 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
32550 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
32560 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
32570 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
32580 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
32590 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
325a0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
325b0 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
325c0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
325d0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
325e0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
325f0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
32600 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
32610 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
32620 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
32630 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
32640 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
32650 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
32660 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
32670 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
32680 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
32690 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
326a0 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
326b0 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
326c0 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
326d0 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
326e0 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
326f0 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
32700 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
32710 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
32720 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
32730 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
32740 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
32750 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
32760 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
32770 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   */.  rc = pModu
32780 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
32790 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
327a0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
327b0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
327c0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
327d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
327e0 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
327f0 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
32800 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65  sor);.  }.  Vdbe
32810 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
32820 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
32830 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
32840 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
32850 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f   to P2 */.    go
32860 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
32870 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
32880 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74  rrupt;.  }.  got
32890 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
328a0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
328b0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
328c0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
328d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
328e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
328f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
32900 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
32910 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
32920 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
32930 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
32940 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
32950 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
32960 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
32970 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
32980 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
32990 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
329a0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
329b0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
329c0 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
329d0 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
329e0 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
329f0 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
32a00 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
32a10 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
32a20 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
32a30 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
32a40 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
32a50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32a60 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
32a70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
32a80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
32a90 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
32aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
32ab0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
32ac0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
32ad0 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
32ae0 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
32af0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
32b00 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
32b10 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
32b20 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
32b30 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
32b40 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
32b50 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
32b60 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
32b70 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
32b80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
32b90 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
32ba0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
32bb0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
32bc0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
32bd0 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
32be0 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
32bf0 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
32c00 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
32c10 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
32c20 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
32c30 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
32c40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
32c50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32c60 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32c70 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
32c80 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
32c90 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
32ca0 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
32cb0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
32cc0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
32cd0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
32ce0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
32cf0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
32d00 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
32d10 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
32d20 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
32d30 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
32d40 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
32d50 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
32d60 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
32d70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
32d80 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
32d90 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
32da0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
32db0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
32dc0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
32dd0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
32de0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
32df0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
32e00 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
32e10 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
32e20 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
32e30 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
32e40 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
32e50 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
32e60 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
32e70 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
32e80 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
32e90 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
32ea0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
32eb0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
32ec0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
32ed0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
32ee0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
32ef0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
32f00 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
32f10 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
32f20 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
32f30 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
32f40 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
32f50 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
32f60 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
32f70 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
32f80 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
32f90 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
32fa0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
32fb0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
32fc0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
32fd0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
32fe0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
32ff0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
33000 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
33010 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
33020 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
33030 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
33040 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
33050 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
33060 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
33070 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
33080 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
33090 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
330a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
330b0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
330c0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
330d0 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
330e0 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
330f0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
33100 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
33110 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
33120 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
33130 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
33140 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
33150 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
33160 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
33170 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
33180 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
33190 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
331a0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
331b0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
331c0 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
331d0 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
331e0 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
331f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33200 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
33210 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
33220 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
33230 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
33240 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
33250 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
33260 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
33270 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
33280 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
33290 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
332a0 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
332b0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
332c0 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
332d0 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
332e0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
332f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
33300 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
33310 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f  break;.  }.  pMo
33320 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
33330 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
33340 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
33350 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
33360 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
33370 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
33380 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
33390 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
333a0 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
333b0 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
333c0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
333d0 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
333e0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
333f0 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
33400 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
33410 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
33420 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
33430 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
33440 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
33450 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
33460 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
33470 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
33480 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
33490 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
334a0 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
334b0 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
334c0 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
334d0 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
334e0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73  nConflict;.    s
334f0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
33500 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
33510 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
33520 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
33530 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
33540 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
33550 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
33560 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
33570 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
33580 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
33590 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
335a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
335b0 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
335c0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70  _CONSTRAINT && p
335d0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43  Op->p4.pVtab->bC
335e0 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20  onstraint ){.   
335f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d     if( pOp->p5==
33600 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
33610 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
33620 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
33630 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72  {.        p->err
33640 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70  orAction = ((pOp
33650 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
33660 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70  ) ? OE_Abort : p
33670 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d  Op->p5);.      }
33680 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
33690 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
336a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
336b0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
336c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
336d0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
336e0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
336f0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
33700 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
33710 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
33720 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
33730 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
33740 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
33750 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
33760 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
33770 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
33780 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
33790 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
337a0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
337b0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
337c0 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
337d0 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
337e0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
337f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
33800 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
33810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
33820 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
33830 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
33840 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
33850 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
33860 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
33870 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
33880 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
33890 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
338a0 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
338b0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
338c0 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
338d0 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
338e0 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
338f0 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
33900 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
33910 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
33920 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
33930 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
33940 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
33950 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
33960 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
33970 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
33980 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73  /* out2 */.  uns
33990 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
339a0 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
339b0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
339c0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
339d0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
339e0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
339f0 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20    newMax = 0;.  
33a00 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
33a10 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69     newMax = sqli
33a20 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
33a30 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  (pBt);.    if( n
33a40 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65  ewMax < (unsigne
33a50 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d  d)pOp->p3 ) newM
33a60 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70  ax = (unsigned)p
33a70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f  Op->p3;.  }.  pO
33a80 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
33a90 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75  3BtreeMaxPageCou
33aa0 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b  nt(pBt, newMax);
33ab0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
33ac0 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  if.../* Opcode: 
33ad0 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a  Init * P2 * P4 *
33ae0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53  .** Synopsis:  S
33af0 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a  tart at P2.**.**
33b00 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69   Programs contai
33b10 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  n a single insta
33b20 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  nce of this opco
33b30 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66  de as the very f
33b40 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a  irst.** opcode..
33b50 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
33b60 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
33b70 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
33b80 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
33b90 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
33ba0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
33bb0 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
33bc0 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
33bd0 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72   callback..** Or
33be0 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c   if P4 is blank,
33bf0 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20   use the string 
33c00 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
33c10 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a  te3_sql()..**.**
33c20 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65   If P2 is not ze
33c30 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ro, jump to inst
33c40 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63  ruction P2..*/.c
33c50 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20  ase OP_Init: {  
33c60 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
33c70 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63  */.  char *zTrac
33c80 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23  e;.  char *z;..#
33c90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33ca0 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64  IT_TRACE.  if( d
33cb0 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20  b->xTrace.   && 
33cc0 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20  !p->doingRerun. 
33cd0 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28    && (zTrace = (
33ce0 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d  pOp->p4.z ? pOp-
33cf0 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29  >p4.z : p->zSql)
33d00 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20  )!=0.  ){.    z 
33d10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70  = sqlite3VdbeExp
33d20 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65  andSql(p, zTrace
33d30 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  );.    db->xTrac
33d40 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
33d50 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   z);.    sqlite3
33d60 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20  DbFree(db, z);. 
33d70 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
33d80 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  _USE_FCNTL_TRACE
33d90 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  .  zTrace = (pOp
33da0 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
33db0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20  .z : p->zSql);. 
33dc0 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20   if( zTrace ){. 
33dd0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
33de0 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
33df0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
33e00 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
33e10 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30  btreeMask, i)==0
33e20 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
33e30 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
33e40 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e  control(db, db->
33e50 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51  aDb[i].zName, SQ
33e60 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  LITE_FCNTL_TRACE
33e70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d  , zTrace);.    }
33e80 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
33e90 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
33ea0 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20  TRACE */.#ifdef 
33eb0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
33ec0 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
33ed0 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29  SQLITE_SqlTrace)
33ee0 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63  !=0.   && (zTrac
33ef0 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
33f00 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
33f10 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
33f20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50     sqlite3DebugP
33f30 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65  rintf("SQL-trace
33f40 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29  : %s\n", zTrace)
33f50 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
33f60 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
33f70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33f80 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20  _OMIT_TRACE */. 
33f90 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
33fa0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
33fb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
33fc0 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
33fd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
33fe0 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
33ff0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
34000 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
34010 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
34020 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
34030 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
34040 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
34050 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
34060 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
34070 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
34080 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
34090 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
340a0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
340b0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
340c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
340d0 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
340e0 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
340f0 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
34100 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
34110 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
34120 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
34130 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
34140 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
34150 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
34160 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
34170 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
34180 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
34190 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
341a0 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
341b0 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
341c0 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
341d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
341e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
341f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
34210 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
34220 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
34230 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
34240 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
34250 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
34260 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
34270 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
34280 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
34290 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
342a0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
342b0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
342c0 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
342d0 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
342e0 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
342f0 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
34300 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
34310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
34350 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
34360 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
34370 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54 69  .      u64 endTi
34380 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  me = sqlite3Hwti
34390 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20  me();.      if( 
343a0 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20  endTime>start ) 
343b0 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20  pOrigOp->cycles 
343c0 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61  += endTime - sta
343d0 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67 4f  rt;.      pOrigO
343e0 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  p->cnt++;.    }.
343f0 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54  #endif..    /* T
34400 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64  he following cod
34410 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74  e adds nothing t
34420 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e  o the actual fun
34430 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a  ctionality.    *
34440 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
34450 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65  .  It is only he
34460 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  re for testing a
34470 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20  nd debugging..  
34480 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65    ** On the othe
34490 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20  r hand, it does 
344a0 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20  burn CPU cycles 
344b0 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75  every time throu
344c0 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76  gh.    ** the ev
344d0 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53  aluator loop.  S
344e0 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69  o we can leave i
344f0 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55  t out when NDEBU
34500 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
34510 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
34520 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20  BUG.    assert( 
34530 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26 26  pOp>=&aOp[-1] &&
34540 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70   pOp<&aOp[p->nOp
34550 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  -1] );..#ifdef S
34560 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
34570 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
34580 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
34590 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63   ){.      if( rc
345a0 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63  !=0 ) printf("rc
345b0 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20  =%d\n",rc);.    
345c0 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f    if( pOrigOp->o
345d0 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
345e0 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
345f0 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
34600 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  OrigOp->p2, &aMe
34610 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29 3b  m[pOrigOp->p2]);
34620 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
34630 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c  f( pOrigOp->opfl
34640 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
34650 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
34660 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f  sterTrace(pOrigO
34670 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 72  p->p3, &aMem[pOr
34680 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  igOp->p3]);.    
34690 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
346a0 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
346b0 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
346c0 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
346d0 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
346e0 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
346f0 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
34700 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
34710 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
34720 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
34730 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
34740 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
34750 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
34760 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
34770 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
34780 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
34790 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
347a0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
347b0 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
347c0 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
347d0 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
347e0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
347f0 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
34800 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
34810 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70 20        (int)(pOp 
34820 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c  - aOp), p->zSql,
34830 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
34840 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
34850 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
34860 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
34870 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
34880 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  led = 1;.  rc = 
34890 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
348a0 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  if( resetSchemaO
348b0 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20  nFault>0 ){.    
348c0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
348d0 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53  chema(db, resetS
348e0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b  chemaOnFault-1);
348f0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20  .  }..  /* This 
34900 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
34910 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63  out of this proc
34920 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20  edure.  We have 
34930 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20  to.  ** release 
34940 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62  the mutexes on b
34950 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20  trees that were 
34960 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a  acquired at the.
34970 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62    ** top. */.vdb
34980 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e  e_return:.  db->
34990 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
349a0 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73  Rowid;.  testcas
349b0 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a  e( nVmStep>0 );.
349c0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
349d0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
349e0 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74  VM_STEP] += (int
349f0 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69  )nVmStep;.  sqli
34a00 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b  te3VdbeLeave(p);
34a10 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
34a20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
34a30 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
34a40 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
34a50 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
34a60 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
34a70 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
34a80 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
34a90 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
34aa0 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
34ab0 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
34ac0 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
34ad0 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
34ae0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
34af0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
34b00 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
34b10 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
34b20 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
34b30 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
34b40 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
34b50 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
34b60 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
34b70 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
34b80 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
34b90 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
34ba0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
34bb0 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
34bc0 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
34bd0 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
34be0 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
34bf0 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
34c00 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
34c10 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
34c20 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
34c30 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
34c40 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
34c50 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
34c60 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
34c70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
34c80 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
34c90 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
34ca0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
34cb0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
34cc0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
34cd0 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
34ce0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
34cf0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
34d00 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
34d10 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
34d20 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
34d30 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
34d40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
34d50 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
34d60 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
34d70 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
34d80 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
34d90 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
34da0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
34db0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
34dc0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
34dd0 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
34de0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
34df0 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.