/ Hex Artifact Content
Login

Artifact 59ad2f4c62178dcce4acef516e00290a7a58dd39:


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 2f 0a 23 69 66 20 21 64  taken..*/.#if !d
1090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
10a0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
10b0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
10c0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
10d0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
10e0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
10f0: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1100: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1110: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1120: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e  dbeTakeBranch(in
1130: 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  t iSrcLine, u8 I
1140: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28  , u8 M){.    if(
1150: 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20   iSrcLine<=2 && 
1160: 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e  ALWAYS(iSrcLine>
1170: 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20  0) ){.      M = 
1180: 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20  iSrcLine;.      
1190: 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72  /* Assert the tr
11a0: 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72  uth of VdbeCover
11b0: 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29  ageAlwaysTaken()
11c0: 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56   and .      ** V
11d0: 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72  dbeCoverageNever
11e0: 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20  Taken() */.     
11f0: 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29   assert( (M & I)
1200: 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==I );.    }else
1210: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1220: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1230: 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29  xVdbeBranch==0 )
1240: 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54   return;  /*NO_T
1250: 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  EST*/.      sqli
1260: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1270: 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69  xVdbeBranch(sqli
1280: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1290: 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a  pVdbeBranchArg,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49        iSrcLine,I
12d0: 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ,M);.    }.  }.#
12e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
12f0: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1300: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1310: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
1320: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
1330: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
1340: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
1350: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
1360: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
1370: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1380: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1390: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
13a0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
13b0: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
13c0: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
13d0: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
13e0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
13f0: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1400: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1410: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
1420: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
1430: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
1440: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
1450: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
1460: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
1470: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1480: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1490: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
14a0: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
14b0: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
14c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
14d0: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
14e0: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
14f0: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1500: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1510: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
1520: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
1530: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
1540: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1550: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
1560: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
1570: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1580: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1590: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
15a0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
15b0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  m string into a 
15c0: 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d  string with P.z=
15d0: 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23  =P.zMalloc..*/.#
15e0: 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72  define Deephemer
15f0: 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66  alize(P) \.   if
1600: 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45  ( ((P)->flags&ME
1610: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20  M_Ephem)!=0 \.  
1620: 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56       && sqlite3V
1630: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
1640: 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e  ble(P) ){ goto n
1650: 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75  o_mem;}../* Retu
1660: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63  rn true if the c
1670: 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64  ursor was opened
1680: 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70   using the OP_Op
1690: 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e  enSorter opcode.
16a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f   */.#define isSo
16b0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
16c0: 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  orter!=0)../*.**
16d0: 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75   Allocate VdbeCu
16e0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
16f0: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1700: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1710: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1720: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1730: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64  ry..*/.static Vd
1740: 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61  beCursor *alloca
1750: 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65  teCursor(.  Vdbe
1760: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1770: 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c    /* The virtual
1780: 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e   machine */.  in
1790: 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20  t iCur,         
17a0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
17b0: 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73  the new VdbeCurs
17c0: 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
17d0: 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld,           /*
17e0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  s in the table o
1800: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
1810: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1820: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
1830: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1840: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1850: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1860: 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  or     /* True f
1870: 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73  or B-Tree.  Fals
1880: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
1890: 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b  le or vtab */.){
18a0: 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d  .  /* Find the m
18b0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
18c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  will be used to 
18d0: 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f  store the blob o
18e0: 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65  f memory.  ** re
18f0: 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
1900: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1910: 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76  ture. It is conv
1920: 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20  enient to use a 
1930: 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72  .  ** vdbe memor
1940: 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65  y cell to manage
1950: 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1960: 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  cation required 
1970: 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43  for a.  ** VdbeC
1980: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20  ursor structure 
1990: 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
19a0: 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a  g reasons:.  **.
19b0: 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d    **   * Sometim
19c0: 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  es cursor number
19d0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
19e0: 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65   couple of diffe
19f0: 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75  rent.  **     pu
1a00: 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65  rposes in a vdbe
1a10: 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69   program. The di
1a20: 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67  fferent uses mig
1a30: 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20  ht require.  ** 
1a40: 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69      different si
1a50: 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  zed allocations.
1a60: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72   Memory cells pr
1a70: 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20  ovide growable. 
1a80: 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69   **     allocati
1a90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ons..  **.  **  
1aa0: 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e   * When using EN
1ab0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1ac0: 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63  GEMENT, memory c
1ad0: 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a  ell buffers can.
1ae0: 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65    **     be free
1af0: 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65  d lazily via the
1b00: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
1b10: 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54  _memory() API. T
1b20: 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e  his.  **     min
1b30: 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65  imizes the numbe
1b40: 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c  r of malloc call
1b50: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79  s made by the sy
1b60: 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  stem..  **.  ** 
1b70: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  Memory cells for
1b80: 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c   cursors are all
1b90: 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f  ocated at the to
1ba0: 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73  p of the address
1bb0: 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d  .  ** space. Mem
1bc0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1bd0: 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  m) corresponds t
1be0: 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63  o cursor 0. Spac
1bf0: 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f  e for.  ** curso
1c00: 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62  r 1 is managed b
1c10: 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  y memory cell (p
1c20: 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a  ->nMem-1), etc..
1c30: 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d    */.  Mem *pMem
1c40: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   = &p->aMem[p->n
1c50: 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e  Mem-iCur];..  in
1c60: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1c70: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1c80: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1c90: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1ca0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1cb0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1cc0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  ld + .      (isB
1cd0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1ce0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1cf0: 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72  e():0);..  asser
1d00: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
1d10: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
1d20: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
1d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1d40: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1d50: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
1d60: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1d70: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
1d80: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
1d90: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
1da0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
1db0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
1dc0: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
1dd0: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
1de0: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
1e00: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
1e10: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
1e20: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
1e30: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73  ield;.    if( is
1e40: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1e50: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1e60: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1e70: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
1e80: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
1e90: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
1ea0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1eb0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
1ec0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
1ed0: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
1ee0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
1ef0: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
1f00: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
1f10: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
1f20: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
1f30: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
1f40: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
1f50: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
1f60: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
1f70: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
1f80: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
1f90: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
1fa0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
1fb0: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
1fc0: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
1fd0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
1fe0: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
1ff0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2000: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2010: 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20  ty(Mem *pRec){. 
2020: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2030: 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  s & (MEM_Real|ME
2040: 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20  M_Int))==0 ){.  
2050: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2060: 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b  .    i64 iValue;
2070: 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52  .    u8 enc = pR
2080: 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28  ec->enc;.    if(
2090: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45   (pRec->flags&ME
20a0: 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75  M_Str)==0 ) retu
20b0: 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  rn;.    if( sqli
20c0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
20d0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
20e0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
20f0: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  urn;.    if( 0==
2100: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
2110: 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20  ec->z, &iValue, 
2120: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b  pRec->n, enc) ){
2130: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69  .      pRec->u.i
2140: 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20   = iValue;.     
2150: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2160: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c  MEM_Int;.    }el
2170: 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e  se{.      pRec->
2180: 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20  r = rValue;.    
2190: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
21a0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d   MEM_Real;.    }
21b0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
21c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
21d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
21e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
21f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2200: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2210: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2220: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2230: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2240: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2250: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2260: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2270: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2280: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2290: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
22a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
22b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
22c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
22d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
22e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
22f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2300: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2310: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2320: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2330: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2340: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2350: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2360: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2370: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2380: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2390: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
23a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
23b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
23c0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
23d0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
23e0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
23f0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2400: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2410: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2420: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2430: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2440: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2450: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2460: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2470: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2480: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2490: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
24a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
24b0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
24c0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
24d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
24e0: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
24f0: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2500: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2510: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2520: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2530: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2540: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2550: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2560: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
2570: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2580: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
2590: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
25a0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
25b0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
25c0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
25d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
25e0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
25f0: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2600: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2610: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2620: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2630: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2640: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2650: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2660: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2670: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2690: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
26a0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
26b0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
26c0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
26d0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
26e0: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
26f0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2700: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2710: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2720: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2730: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2740: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2750: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2760: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2770: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2780: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2790: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
27a0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
27b0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
27c0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
27d0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
27e0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
27f0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2800: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2810: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2820: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2830: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2840: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2850: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2860: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2870: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2880: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2890: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
28a0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
28b0: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
28c0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
28d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
28e0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
28f0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2900: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2910: 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20  m);.    eType = 
2920: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
2930: 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  pe(pVal);.  }.  
2940: 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a  return eType;.}.
2950: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2960: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2970: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2980: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2990: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
29a0: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
29b0: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
29c0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
29d0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
29e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
29f0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2a00: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2a10: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2a20: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2a30: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2a40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
2a50: 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  n the numeric ty
2a60: 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74  pe for pMem, eit
2a70: 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d  her MEM_Int or M
2a80: 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20  EM_Real or both 
2a90: 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a  or.** none.  .**
2aa0: 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79  .** Unlike apply
2ab0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2ac0: 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ), this routine 
2ad0: 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20  does not modify 
2ae0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20  pMem->flags..** 
2af0: 42 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20  But it does set 
2b00: 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d 65 6d  pMem->r and pMem
2b10: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
2b20: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
2b30: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
2b40: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
2b50: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
2b60: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2b70: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
2b80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2b90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2ba0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
2bb0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
2bc0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
2bd0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
2be0: 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d  toF(pMem->z, &pM
2bf0: 65 6d 2d 3e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  em->r, pMem->n, 
2c00: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
2c10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
2c20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
2c30: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
2c40: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
2c50: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
2c60: 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  >enc)==SQLITE_OK
2c70: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
2c80: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
2c90: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52      return MEM_R
2ca0: 65 61 6c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  eal;.  }.  retur
2cb0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
2cc0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
2cd0: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
2ce0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2cf0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
2d00: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
2d10: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
2d20: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
2d30: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
2d40: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
2d50: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
2d60: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
2d70: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
2d80: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
2d90: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
2da0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
2db0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
2dc0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
2dd0: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
2de0: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
2df0: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
2e00: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
2e10: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
2e20: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
2e30: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
2e40: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2e50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2e60: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2e70: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2e80: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2e90: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
2ea0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2eb0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
2ec0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ed0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
2ee0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
2ef0: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
2f00: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
2f10: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
2f20: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
2f30: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
2f40: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
2f50: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
2f60: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
2f70: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2f80: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2f90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
2fa0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fb0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
2fc0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2fd0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2fe0: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
2ff0: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3000: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3010: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3020: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3030: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3040: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3050: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3060: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3070: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3080: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3090: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
30a0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
30b0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
30c0: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
30d0: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
30e0: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
30f0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3100: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3110: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3120: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3130: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
3140: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3150: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3160: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
3170: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
3180: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3190: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
31a0: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
31b0: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
31c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
31d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
31e0: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
31f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3200: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3210: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3220: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3230: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3240: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
3250: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
3260: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3270: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3280: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3290: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
32a0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
32b0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
32c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
32d0: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
32e0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
32f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3300: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3310: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3320: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3330: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3340: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
3350: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3360: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
3370: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
3380: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3390: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
33a0: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
33b0: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
33c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
33d0: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
33e0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
33f0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3400: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3410: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3420: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3430: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
3440: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
3450: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
3460: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
3470: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3480: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
3490: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
34a0: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
34b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34c0: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
34d0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
34e0: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
34f0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3500: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3510: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3520: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3530: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3540: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3550: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3560: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3570: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3580: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3590: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
35a0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35b0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
35c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
35d0: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
35e0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
35f0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3600: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3610: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3630: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3640: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3650: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3660: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3670: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3680: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3690: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
36a0: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3700: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3710: 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  ->r);.#endif.  }
3720: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3730: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3740: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3750: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3760: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3770: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3780: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3790: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
37a0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
37b0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
37c0: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
37d0: 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52 65  terTrace(int iRe
37e0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72  g, Mem *p){.  pr
37f0: 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20  intf("REG[%d] = 
3800: 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54  ", iReg);.  memT
3810: 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20  racePrint(p);.  
3820: 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a  printf("\n");.}.
3830: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3840: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64  QLITE_DEBUG.#  d
3850: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3860: 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d  RACE(R,M) if(db-
3870: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64  >flags&SQLITE_Vd
3880: 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65 72  beTrace)register
3890: 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65  Trace(R,M).#else
38a0: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
38b0: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
38c0: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
38d0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
38e0: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
38f0: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
3900: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
3910: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
3920: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3930: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3940: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3950: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3960: 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  f..#ifndef NDEBU
3970: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3980: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3990: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
39a0: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
39b0: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
39c0: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
39d0: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
39e0: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
39f0: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3a00: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3a10: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3a20: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3a30: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3a40: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3a50: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3a60: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3a70: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3a80: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3a90: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3aa0: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3ab0: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3ac0: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3ad0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3ae0: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3af0: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3b00: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3b10: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3b20: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3b30: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3b40: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3b50: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3b60: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3b70: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  ndif.../*.** Exe
3b80: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3b90: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3ba0: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
3bb0: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
3bc0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
3bd0: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
3be0: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
3bf0: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
3c00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
3c10: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
3c20: 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20  pc=0;           
3c30: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
3c40: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
3c50: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
3c60: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
3c70: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
3c80: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ca0: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
3cb0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
3cc0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
3cd0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
3ce0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
3cf0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
3d00: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
3d10: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
3d20: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
3d30: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
3d40: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
3d50: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
3d60: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
3d70: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
3d80: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
3d90: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
3da0: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
3db0: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
3dc0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
3dd0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
3de0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
3df0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
3e00: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3e10: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
3e20: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
3e30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
3e40: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
3e50: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
3e60: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
3e70: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
3e80: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
3e90: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
3ea0: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
3eb0: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
3ec0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
3ed0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
3ee0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
3ef0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
3f00: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
3f10: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
3f30: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
3f40: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
3f50: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
3f60: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
3f70: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
3f80: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
3f90: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
3fa0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
3fb0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
3fc0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
3fd0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
3fe0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
3ff0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
4000: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
4010: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4020: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4030: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4040: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4050: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4060: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4070: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4080: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4090: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
40a0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
40b0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
40c0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
40d0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
40e0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
40f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4100: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4120: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4130: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4140: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4150: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4160: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4170: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4180: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4190: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
41a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
41b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
41c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
41d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
41e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
41f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4200: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4210: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4220: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4230: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4240: 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72  E_OK;.  p->iCurr
4250: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
4260: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4270: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4280: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4290: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
42a0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
42b0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
42c0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
42d0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
42e0: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
42f0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4300: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4310: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4320: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4330: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4340: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4350: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4360: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4370: 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  mit = (unsigned)
4380: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
4390: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
43a0: 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20  _STEP];.    if( 
43b0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d  nProgressLimit==
43c0: 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67  0 ){.      nProg
43d0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e  ressLimit = db->
43e0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20  nProgressOps;.  
43f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
4400: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d  ProgressLimit %=
4410: 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e   (unsigned)db->n
4420: 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20  ProgressOps;.   
4430: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69   }.  }.#endif.#i
4440: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4450: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4460: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4470: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
4480: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
4490: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
44a0: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
44b0: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
44c0: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
44d0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
44e0: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
44f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4500: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
4510: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4520: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4530: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
4540: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
4550: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
4560: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
4570: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4580: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4590: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
45a0: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
45b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
45c0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
45d0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
45e0: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
45f0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4600: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
4610: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
4620: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
4630: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
4640: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
4650: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
4660: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
4670: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
4680: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
4690: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
46a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
46b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
46c0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
46d0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
46e0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
46f0: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
4700: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4710: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4720: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4730: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4740: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4750: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4760: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4770: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4780: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4790: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
47a0: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
47b0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
47c0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
47d0: 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20  Step++;.    pOp 
47e0: 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20  = &aOp[pc];..   
47f0: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
4800: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
4810: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
4820: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
4830: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4840: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
4850: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
4860: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
4870: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4880: 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b  tdout, pc, pOp);
4890: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
48a0: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
48b0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
48c0: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
48d0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
48e0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
48f0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
4900: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
4910: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
4920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
4930: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
4940: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4950: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
4960: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4970: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
4980: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
4990: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
49a0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
49b0: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
49c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
49d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
49e0: 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68   any opcode with
49f0: 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65   the "out2-prere
4a00: 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  lease" tag, free
4a10: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
4a20: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
4a30: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
4a40: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
4a50: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
4a60: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
4a70: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
4a80: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
4a90: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
4aa0: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
4ab0: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
4ac0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
4ad0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
4ae0: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
4af0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
4b00: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
4b10: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
4b20: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4b30: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
4b40: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
4b50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
4b60: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4b70: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
4b80: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
4b90: 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26  ;.      pOut = &
4ba0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4bb0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
4bc0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
4bd0: 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c        VdbeMemRel
4be0: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
4bf0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4c00: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a  MEM_Int;.    }..
4c10: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
4c20: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
4c30: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
4c40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c50: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4c60: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4c70: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
4c80: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
4c90: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4ca0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  ( pOp->p1<=(p->n
4cb0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
4cc0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4cd0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
4ce0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
4cf0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
4d00: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
4d10: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
4d20: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
4d30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
4d40: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
4d50: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
4d60: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
4d70: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4d80: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
4d90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4da0: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
4db0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4dc0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4dd0: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
4de0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
4df0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
4e00: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4e10: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
4e20: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
4e30: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
4e40: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
4e50: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
4e60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
4e70: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
4e80: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4e90: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
4ea0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4eb0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
4ec0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
4ed0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
4ee0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
4ef0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
4f00: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
4f10: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f20: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
4f30: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
4f40: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
4f50: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
4f60: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
4f70: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
4f80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4f90: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4fa0: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
4fb0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4fc0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4fd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4fe0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4ff0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5000: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5010: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5020: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5030: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5040: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  ags & OPFLG_OUT3
5050: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5060: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5070: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5080: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
5090: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
50a0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
50b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
50c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
50d0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20   }.#endif.  .   
50e0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
50f0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5140: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5150: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5160: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5170: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5180: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5190: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
51a0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
51b0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
51c0: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
51d0: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
51e0: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
51f0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5200: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5210: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5220: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5230: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5240: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5250: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5260: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5270: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5280: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5290: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
52a0: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
52b0: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
52c0: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
52d0: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
52e0: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
52f0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5300: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5310: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5320: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5330: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5340: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5350: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5360: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5370: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5380: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5390: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
53a0: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
53b0: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
53c0: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
53d0: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
53e0: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
53f0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5400: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5410: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5420: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5430: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5440: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5450: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5460: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5470: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5480: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5490: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
54a0: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
54b0: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
54c0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
54d0: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
54e0: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
54f0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5500: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5510: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5520: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5530: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5540: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5550: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5560: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5570: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5580: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5590: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
55a0: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
55b0: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
55c0: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
55d0: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
55e0: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
55f0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5600: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5610: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5620: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5630: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
5640: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
5650: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5660: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5670: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5680: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5690: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
56a0: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
56b0: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
56c0: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
56d0: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
56e0: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
56f0: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
5700: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
5710: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
5720: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
5730: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
5740: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
5750: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
5760: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
5770: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
5780: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
5790: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
57a0: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
57b0: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
57c0: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
57d0: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
57e0: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
57f0: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
5800: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
5810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
5860: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
5870: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
5880: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
5890: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
58a0: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
58b0: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
58c0: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
58d0: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
58e0: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
58f0: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
5900: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
5910: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
5920: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
5930: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
5940: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
5950: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
5960: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
5970: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
5980: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
5990: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
59a0: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
59b0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
59c0: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
59d0: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
59e0: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
59f0: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
5a00: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
5a10: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
5a20: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
5a30: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
5a40: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
5a50: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5a60: 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  1;..  /* Opcodes
5a70: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
5a80: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
5a90: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
5aa0: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
5ab0: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
5ac0: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
5ad0: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
5ae0: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
5af0: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
5b00: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
5b10: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5b20: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
5b30: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
5b40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5b50: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
5b60: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
5b70: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
5b80: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
5b90: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
5ba0: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
5bb0: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
5bc0: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
5bd0: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
5be0: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
5bf0: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
5c00: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
5c10: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
5c20: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
5c30: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
5c40: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
5c50: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
5c60: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
5c70: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
5c80: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
5c90: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
5ca0: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
5cb0: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
5cc0: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
5cd0: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
5ce0: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
5cf0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5d00: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5d10: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5d20: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
5d30: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5d40: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
5d50: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5d60: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5d70: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5d80: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5d90: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
5da0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
5db0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5dc0: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5dd0: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
5de0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5df0: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5e00: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5e10: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
5e20: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
5e30: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5e40: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5e50: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5e60: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5e70: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
5e80: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5e90: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
5ea0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
5eb0: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
5ec0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
5ed0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
5ee0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
5ef0: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5f00: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
5f10: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
5f20: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
5f30: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
5f40: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
5f50: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
5f60: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
5f70: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5f80: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5f90: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5fa0: 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  halt;.    }.  }.
5fb0: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
5fc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
5fd0: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
5fe0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
5ff0: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
6000: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
6010: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
6020: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6030: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6040: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
6050: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6060: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6070: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
6080: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
6090: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
60a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
60b0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
60c0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
60d0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
60e0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
60f0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
6100: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
6110: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6120: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6130: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6140: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6160: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6170: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6180: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6190: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
61a0: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
61b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
61c0: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
61d0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
61e0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
61f0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6200: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6210: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6220: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6230: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6240: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6250: 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28  _Int );.  pc = (
6260: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6270: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6280: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6290: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
62a0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
62b0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
62c0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
62d0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
62e0: 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59 69 65 6c   it will OP_Yiel
62f0: 64 20 74 6f 20 74 68 65 20 63 6f 2d 72 6f 75 74  d to the co-rout
6300: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6310: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
6320: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
6330: 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  n the co-routine
6340: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6350: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6360: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6370: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6380: 72 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  r the co-routine
6390: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
63a0: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
63b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  ..*/.case OP_Ini
63c0: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
63d0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
63e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
63f0: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
6400: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
6410: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
6420: 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f  pOp->p2>=0 && pO
6430: 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
6440: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6450: 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
6460: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74  p->nOp );.  pOut
6470: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6480: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64  ];.  assert( !Vd
6490: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
64a0: 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  t) );.  pOut->u.
64b0: 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  i = pOp->p3 - 1;
64c0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
64d0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20   MEM_Int;.  if( 
64e0: 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70  pOp->p2 ) pc = p
64f0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72  Op->p2 - 1;.  br
6500: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6510: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
6520: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6530: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
6540: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
6550: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
6560: 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 2e 0a  is an OP_Yield..
6570: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6580: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6590: 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a 2a  hat OP_Yield..**
65a0: 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c   After the jump,
65b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
65c0: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
65d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
65e0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
65f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6600: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
6610: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6620: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6630: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6640: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
6650: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
6660: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
6670: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
6680: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
6690: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
66a0: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
66b0: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
66c0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
66d0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
66e0: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
66f0: 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d  .  pc = pCaller-
6700: 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d  >p2 - 1;.  pIn1-
6710: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6720: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6740: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6750: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6760: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6770: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6780: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
6790: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 2d  **.** If the co-
67a0: 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69 74  routine ends wit
67b0: 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72 20 4f 50  h OP_Yield or OP
67c0: 5f 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e  _Return then con
67d0: 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74 68 65 20  tinue.** to the 
67e0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
67f0: 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 6f  .  But if the co
6800: 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69  -routine ends wi
6810: 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72 6f  th.** OP_EndCoro
6820: 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  utine, jump imme
6830: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
6840: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
6850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6860: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
6870: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
6880: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6890: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
68a0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
68b0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
68c0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
68d0: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
68e0: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
68f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6900: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6910: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6920: 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a  .  pc = pcDest;.
6930: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6940: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
6950: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
6960: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
6970: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
6980: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
6990: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
69a0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
69b0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
69c0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
69d0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
69e0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
69f0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
6a00: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
6a10: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
6a20: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
6a30: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
6a40: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
6a50: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
6a60: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
6a70: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
6a80: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
6a90: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
6aa0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
6ab0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
6ac0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
6ad0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
6ae0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
6af0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
6b00: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
6b10: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
6b20: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
6b30: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
6b40: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
6b50: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
6b60: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
6b70: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
6b80: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
6b90: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
6ba0: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
6bb0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
6bc0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6bd0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
6be0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
6bf0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
6c00: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
6c10: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
6c20: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
6c30: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
6c40: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
6c50: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
6c60: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
6c70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
6c80: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
6c90: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
6ca0: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
6cb0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
6cc0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
6cd0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
6ce0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
6cf0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
6d00: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
6d10: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
6d20: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
6d30: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
6d40: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
6d50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
6d60: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
6d70: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
6d80: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
6d90: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
6da0: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
6db0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
6dc0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
6dd0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
6de0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
6df0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
6e00: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
6e10: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
6e20: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
6e30: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
6e40: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
6e50: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
6e60: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e70: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
6e80: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
6e90: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
6ea0: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
6eb0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
6ec0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
6ed0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
6ee0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
6ef0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
6f00: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
6f10: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
6f20: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
6f30: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
6f40: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
6f50: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
6f60: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
6f70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
6f80: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
6f90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
6fa0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
6fb0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
6fc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6fd0: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
6fe0: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20  ar *zLogFmt;..  
6ff0: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
7000: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
7010: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
7020: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
7030: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
7040: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
7050: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56   frame. */.    V
7060: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7070: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
7080: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
7090: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
70a0: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
70b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
70c0: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
70d0: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
70e0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
70f0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
7100: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
7110: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
7120: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
7130: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7140: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7150: 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65  uction pc is the
7160: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7170: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7180: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7190: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
71a0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
71b0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
71c0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
71d0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
71e0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
71f0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7200: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7210: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7220: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7230: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7240: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7250: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7260: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7270: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7280: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7290: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20  m.  */.      pc 
72a0: 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d  = p->aOp[pc].p2-
72b0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70  1;.    }.    aOp
72c0: 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61   = p->aOp;.    a
72d0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
72e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
72f0: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
7300: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
7310: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
7320: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
7330: 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20   if( p->rc ){.  
7340: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
7350: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
7360: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
7370: 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e   azType[] = { "N
7380: 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55  OT NULL", "UNIQU
7390: 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20  E", "CHECK",.   
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73c0: 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49            "FOREI
73d0: 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20  GN KEY" };.     
73e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
73f0: 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d  >=1 && pOp->p5<=
7400: 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  4 );.      testc
7410: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
7420: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7430: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
7440: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7450: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
7460: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7470: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
7480: 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70     zType = azTyp
7490: 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20  e[pOp->p5-1];.  
74a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
74b0: 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Type = 0;.    }.
74c0: 20 20 20 20 61 73 73 65 72 74 28 20 7a 54 79 70      assert( zTyp
74d0: 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  e!=0 || pOp->p4.
74e0: 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67  z!=0 );.    zLog
74f0: 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20  Fmt = "abort at 
7500: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b  %d in [%s]: %s";
7510: 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65 20 26  .    if( zType &
7520: 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
7530: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
7540: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
7550: 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74  g, db, "%s const
7560: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73  raint failed: %s
7570: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
7580: 20 20 20 20 20 20 20 20 20 20 20 7a 54 79 70 65             zType
7590: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
75a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
75b0: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73  >p4.z ){.      s
75c0: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
75d0: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
75e0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
75f0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7600: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
7610: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
7620: 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72  , db, "%s constr
7630: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54  aint failed", zT
7640: 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ype);.    }.    
7650: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
7660: 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63  >p1, zLogFmt, pc
7670: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
7680: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
7690: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
76a0: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
76b0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
76c0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
76d0: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
76e0: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
76f0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
7700: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63  {.    p->rc = rc
7710: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
7720: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
7730: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7740: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
7750: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
7760: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
7770: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
7780: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
7790: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
77a0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
77b0: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
77c0: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
77d0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
77e0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
77f0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
7800: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
7810: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
7820: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7830: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
7840: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
7850: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
7860: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7870: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
7880: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
7890: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
78a0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75  ase */.  pOut->u
78b0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
78c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
78d0: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
78e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
78f0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
7900: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
7910: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
7920: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
7930: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
7940: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
7950: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7960: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
7970: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7980: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7990: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
79a0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
79b0: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
79c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
79d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
79e0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
79f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
7a00: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
7a10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7a20: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
7a30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
7a40: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
7a50: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
7a60: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
7a70: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7a80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
7a90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7aa0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7ab0: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7ac0: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7ad0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7ae0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7af0: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7b00: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7b10: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7b20: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7b30: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
7b40: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
7b50: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
7b60: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
7b70: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
7b80: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
7b90: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
7ba0: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
7bb0: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
7bc0: 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74  ** into an OP_St
7bd0: 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69  ring before it i
7be0: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
7bf0: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
7c00: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
7c10: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
7c20: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
7c30: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
7c40: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
7c50: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
7c60: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
7c70: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7c80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7c90: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7ca0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7cb0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7cc0: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
7cd0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
7ce0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
7cf0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
7d00: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
7d10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7d20: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7d30: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7d40: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
7d50: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7d60: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7d70: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7d80: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7d90: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7da0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7db0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7dc0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
7dd0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
7de0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
7df0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
7e00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
7e10: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
7e20: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7e30: 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
7e40: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
7e50: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  ==0 );.    pOut-
7e60: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7e70: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7e80: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7e90: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
7ea0: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
7eb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
7ec0: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
7ed0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
7ee0: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
7ef0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
7f00: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
7f10: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
7f20: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
7f30: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
7f40: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7f50: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7f60: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7f70: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7f80: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7f90: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7fa0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7fb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7fc0: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7fd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7fe0: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
7ff0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
8000: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
8010: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
8020: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
8030: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8040: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
8050: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8060: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
8070: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8080: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
8090: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
80a0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
80b0: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
80c0: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
80d0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
80e0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
80f0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8100: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8110: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8120: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
8130: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8140: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
8150: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8160: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8170: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8180: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8190: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
81a0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
81b0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
81c0: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
81d0: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
81e0: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
81f0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
8200: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
8210: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
8220: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
8230: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
8240: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
8250: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
8260: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
8270: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
8280: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
8290: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
82a0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
82b0: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
82c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
82d0: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
82e0: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
82f0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
8300: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8310: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
8320: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
8330: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
8340: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
8350: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
8360: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
8370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8380: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
8390: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
83a0: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
83b0: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
83c0: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
83d0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
83e0: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
83f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
8400: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
8410: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
8420: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8430: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8440: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8460: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8470: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8480: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8490: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
84a0: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
84b0: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
84c0: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
84d0: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
84e0: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
84f0: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8500: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8510: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8520: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8530: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8540: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8550: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
8560: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
8570: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
8580: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
8590: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
85a0: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
85b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
85c0: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
85d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
85e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
85f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8600: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8610: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
8620: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
8630: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
8640: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
8650: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8660: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8670: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8680: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
8690: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
86a0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
86b0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
86c0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
86d0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
86e0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
86f0: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8710: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8720: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8730: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
8740: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
8750: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8760: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
8770: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
8780: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
8790: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
87a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
87b0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
87c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
87d0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
87e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
87f0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
8800: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
8810: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
8820: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
8830: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
8840: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
8850: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
8860: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
8870: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
8880: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
8890: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
88a0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
88b0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
88c0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
88d0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
88e0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
88f0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
8900: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
8910: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
8920: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
8930: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
8940: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
8950: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
8960: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
8970: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
8980: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
8990: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
89a0: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
89b0: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
89c0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
89d0: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
89e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
89f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8a00: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8a10: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
8a20: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
8a30: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
8a40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8a50: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
8a60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8a70: 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d  opsis:  r[P2@P3]
8a80: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
8a90: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
8aa0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8ab0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
8ac0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
8ad0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
8ae0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
8af0: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
8b00: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
8b10: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
8b20: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
8b30: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
8b40: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
8b50: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
8b60: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
8b70: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
8b80: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
8b90: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
8ba0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
8bb0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
8bc0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
8bd0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
8be0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
8bf0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8c00: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
8c10: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
8c20: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
8c30: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8c40: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
8c50: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8c60: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8c70: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8c80: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
8c90: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
8ca0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
8cb0: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
8cc0: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
8cd0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
8ce0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
8cf0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
8d00: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
8d10: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
8d20: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
8d30: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8d40: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
8d50: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
8d60: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
8d70: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
8d80: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
8d90: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
8da0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8db0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62  , pOut);.    Vdb
8dc0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74  eMemRelease(pOut
8dd0: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
8de0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
8df0: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c      memcpy(pOut,
8e00: 20 70 49 6e 31 2c 20 73 69 7a 65 6f 66 28 4d 65   pIn1, sizeof(Me
8e10: 6d 29 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  m));.#ifdef SQLI
8e20: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
8e30: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8e40: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
8e50: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8e60: 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70  <&aMem[p1+pOp->p
8e70: 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  3] ){.      pOut
8e80: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
8e90: 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p1 - pOp->p2;.  
8ea0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70    }.#endif.    p
8eb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
8ec0: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
8ed0: 70 49 6e 31 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a  pIn1->xDel = 0;.
8ee0: 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f      pIn1->zMallo
8ef0: 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  c = zMalloc;.   
8f00: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8f10: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
8f20: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
8f30: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
8f40: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
8f50: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
8f60: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
8f70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8f80: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
8f90: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
8fa0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
8fb0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
8fc0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
8fd0: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
8fe0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8ff0: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
9000: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
9010: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
9020: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
9030: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
9040: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
9050: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
9060: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
9070: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
9080: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
9090: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
90a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
90b0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
90c0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
90d0: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
90e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
90f0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9100: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9110: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9120: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
9130: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9140: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9150: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
9160: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9170: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
9180: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
9190: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
91a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
91b0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
91c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
91d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
91e0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
91f0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9200: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
9210: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
9220: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
9230: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
9240: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9250: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9260: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9270: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
9280: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
9290: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
92a0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
92b0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
92c0: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
92d0: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
92e0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
92f0: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
9300: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
9310: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
9320: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
9330: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
9340: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
9350: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
9360: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
9370: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
9380: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
9390: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
93a0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
93b0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
93c0: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
93d0: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
93e0: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
93f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9400: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
9410: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9420: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9430: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
9440: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
9450: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9460: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
9470: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9480: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
9490: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
94a0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
94b0: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
94c0: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
94d0: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
94e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
94f0: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
9500: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9510: 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d   output=r[P1@P2]
9520: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
9530: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
9540: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
9550: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
9560: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
9570: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
9580: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
9590: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
95a0: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
95b0: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
95c0: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
95d0: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
95e0: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
95f0: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
9600: 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31  cess to the r(P1
9610: 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61  )..r(P1+P2-1) va
9620: 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72  lues as.** the r
9630: 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61  esult row..*/.ca
9640: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
9650: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
9660: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
9670: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
9680: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
9690: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
96a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
96b0: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28  p->p1+pOp->p2<=(
96c0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
96d0: 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65  or)+1 );..#ifnde
96e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
96f0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
9700: 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f    /* Run the pro
9710: 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75  gress counter ju
9720: 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  st before return
9730: 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ing..  */.  if( 
9740: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
9750: 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d  .   && nVmStep>=
9760: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20  nProgressLimit. 
9770: 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65    && db->xProgre
9780: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
9790: 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  Arg)!=0.  ){.   
97a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
97b0: 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f  ERRUPT;.    goto
97c0: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
97d0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
97e0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
97f0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
9800: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
9810: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
9820: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
9830: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
9840: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
9850: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
9860: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
9870: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
9880: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
9890: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
98a0: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
98b0: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
98c0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
98d0: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
98e0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
98f0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
9900: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
9910: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
9920: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61  rnal );.    brea
9930: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  k;.  }..  /* If 
9940: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
9950: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
9960: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
9970: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
9980: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
9990: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
99a0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
99b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
99c0: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
99d0: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
99e0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
99f0: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
9a00: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
9a10: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9a20: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
9a30: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
9a40: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
9a50: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
9a60: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
9a70: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
9a80: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
9a90: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
9aa0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
9ab0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
9ac0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
9ad0: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
9ae0: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
9af0: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
9b00: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
9b10: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
9b20: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
9b30: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
9b40: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
9b50: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
9b60: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
9b70: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
9b80: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
9b90: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
9ba0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
9bb0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
9bc0: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
9bd0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
9be0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
9bf0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
9c00: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
9c10: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
9c20: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
9c30: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
9c40: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
9c50: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
9c60: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
9c70: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
9c80: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
9c90: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
9ca0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
9cb0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
9cc0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
9cd0: 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  SE);.  if( NEVER
9ce0: 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
9cf0: 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
9d00: 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  }..  /* Invalida
9d10: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
9d20: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
9d30: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
9d40: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
9d50: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
9d60: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
9d70: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
9d80: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
9d90: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
9da0: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
9db0: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
9dc0: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
9dd0: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
9de0: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
9df0: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
9e00: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
9e10: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
9e20: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
9e30: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
9e40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9e50: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
9e60: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
9e70: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
9e80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
9e90: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
9ea0: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
9eb0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
9ec0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
9ed0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
9ee0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
9ef0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
9f00: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
9f10: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9f20: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
9f30: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
9f40: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
9f50: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
9f60: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
9f70: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
9f80: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
9f90: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
9fa0: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
9fb0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
9fc0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
9fd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9fe0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
9ff0: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
a000: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
a010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
a020: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
a030: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
a040: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
a050: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a060: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a070: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
a080: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
a090: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
a0a0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
a0b0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
a0c0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
a0d0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
a0e0: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
a0f0: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
a100: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
a110: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
a120: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
a130: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a140: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
a150: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
a160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
a170: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
a180: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
a190: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
a1a0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
a1b0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
a1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a1d0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
a1e0: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
a1f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
a200: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
a210: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
a220: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
a230: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
a240: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
a250: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
a260: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
a270: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
a280: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
a290: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
a2a0: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
a2b0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
a2c0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
a2d0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
a2e0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
a2f0: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
a300: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
a310: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
a320: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
a330: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
a340: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
a350: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a360: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
a370: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
a380: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
a390: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
a3a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
a3b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
a3c0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
a3d0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
a3e0: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
a3f0: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
a400: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
a410: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
a420: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
a430: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
a440: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
a450: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
a460: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
a470: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
a480: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
a490: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
a4a0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
a4b0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
a4c0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a4d0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
a4e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a4f0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a500: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
a510: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
a520: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
a530: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
a540: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
a550: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a560: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a570: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
a580: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
a590: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
a5a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
a5b0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
a5c0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a5d0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
a5e0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
a5f0: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
a600: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a610: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
a620: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a630: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a640: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a650: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a660: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a670: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a680: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a690: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
a6a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a6b0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a6c0: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
a6d0: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
a6e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a6f0: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
a700: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a710: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a720: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a730: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a740: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a750: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a760: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a770: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
a780: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a790: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a7a0: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
a7b0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
a7c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
a7d0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
a7e0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
a7f0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a800: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a810: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
a820: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
a840: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
a850: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
a860: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a870: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
a880: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a890: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
a8a0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
a8b0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a8c0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
a8d0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
a8e0: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
a8f0: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
a900: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
a910: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
a920: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
a930: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a940: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
a950: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
a960: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
a970: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
a980: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
a990: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
a9a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a9b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a9c0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a9e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
a9f0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
aa00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
aa10: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
aa20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
aa30: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
aa40: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
aa50: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
aa60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
aa70: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
aa80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aa90: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aab0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
aac0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
aad0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
aae0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
aaf0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ab00: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
ab10: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
ab20: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
ab30: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
ab40: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
ab50: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
ab60: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
ab70: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
ab80: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
ab90: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
aba0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
abb0: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
abc0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
abd0: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
abe0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
abf0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
ac00: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
ac10: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
ac20: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
ac30: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
ac40: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
ac50: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
ac60: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
ac70: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
ac80: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
ac90: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
aca0: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
acb0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
acc0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
acd0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
ace0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
acf0: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
ad00: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
ad10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ad20: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
ad30: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
ad40: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ad50: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
ad60: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
ad70: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
ad80: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
ad90: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
ada0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
adb0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
adc0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
add0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
ade0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
adf0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
ae00: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
ae10: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
ae20: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
ae30: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
ae40: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
ae50: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
ae60: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
ae70: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
ae80: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
ae90: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
aea0: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
aeb0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
aec0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
aed0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
aee0: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
aef0: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
af00: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
af10: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
af20: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
af30: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
af40: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
af50: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
af60: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
af70: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
af80: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
af90: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
afa0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
afb0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
afc0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
afd0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
afe0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
aff0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b000: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b010: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b020: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b030: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
b040: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b050: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
b060: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
b070: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b080: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b090: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
b0a0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
b0b0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
b0c0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
b0d0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
b0e0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
b0f0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
b100: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b110: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b120: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b130: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
b140: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b150: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
b160: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
b170: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
b180: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
b190: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
b1a0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
b1b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b1c0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b1d0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
b1e0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
b1f0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
b200: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
b210: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
b220: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
b230: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b240: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
b250: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
b260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b270: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b280: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
b290: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
b2a0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
b2b0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b2c0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b2d0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b2e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b2f0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b300: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
b310: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
b320: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b330: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
b340: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
b350: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
b360: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
b370: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b380: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b390: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
b3a0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
b3b0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
b3c0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b3d0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
b3e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72  .    pOut->r = r
b3f0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
b400: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b410: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
b420: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
b430: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
b440: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
b450: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
b460: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
b470: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
b480: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
b490: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b4a0: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
b4b0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b4c0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
b4d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
b4e0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
b4f0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
b500: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
b510: 65 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68  eq struct. If th
b520: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
b530: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
b540: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
b550: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
b560: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
b570: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
b580: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
b590: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
b5a0: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
b5b0: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
b5c0: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
b5d0: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
b5e0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
b5f0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
b600: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
b610: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
b620: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
b630: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
b640: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
b650: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
b660: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
b670: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
b680: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
b690: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
b6a0: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
b6b0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
b6c0: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
b6d0: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
b6e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
b6f0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
b700: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
b710: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
b720: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
b730: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
b740: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
b750: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
b760: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
b770: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
b780: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
b790: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
b7a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b7b0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
b7c0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
b7d0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
b7e0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
b7f0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
b800: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
b810: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b820: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
b830: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
b840: 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28  sis: r[P3]=func(
b850: 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
b860: 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75  Invoke a user fu
b870: 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20  nction (P4 is a 
b880: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e  pointer to a Fun
b890: 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20  ction structure 
b8a0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20  that.** defines 
b8b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69  the function) wi
b8c0: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
b8d0: 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
b8e0: 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75  ter P2 and.** su
b8f0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
b900: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b910: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ction is stored 
b920: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b930: 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  ** Register P3 m
b940: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
b950: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b960: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
b970: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
b980: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
b990: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
b9a0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
b9b0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
b9c0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
b9d0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
b9e0: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
b9f0: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
ba00: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
ba10: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
ba20: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
ba30: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
ba40: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
ba50: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
ba60: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
ba70: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
ba80: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
ba90: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
baa0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
bab0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
bac0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
bad0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
bae0: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
baf0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
bb00: 20 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67   AggStep and Agg
bb10: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
bb20: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
bb30: 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  nt i;.  Mem *pAr
bb40: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  g;.  sqlite3_con
bb50: 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
bb60: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
bb70: 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e  l;.  int n;..  n
bb80: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70   = pOp->p5;.  ap
bb90: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
bba0: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
bbb0: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73  || n==0 );.  ass
bbc0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
bbd0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
bbe0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
bbf0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
bc00: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
bc10: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
bc20: 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65  , pOut);..  asse
bc30: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
bc40: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
bc50: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
bc60: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
bc70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
bc80: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
bc90: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
bca0: 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65  );.  pArg = &aMe
bcb0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
bcc0: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
bcd0: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73   pArg++){.    as
bce0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
bcf0: 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70  (pArg) );.    ap
bd00: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
bd10: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
bd20: 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47  e(pArg);.    REG
bd30: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
bd40: 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20  >p2+i, pArg);.  
bd50: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
bd60: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
bd70: 43 44 45 46 20 29 3b 0a 20 20 63 74 78 2e 70 46  CDEF );.  ctx.pF
bd80: 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
bd90: 75 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d  unc;.  ctx.iOp =
bda0: 20 70 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65   pc;.  ctx.pVdbe
bdb0: 20 3d 20 70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20   = p;..  /* The 
bdc0: 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20  output cell may 
bdd0: 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62  already have a b
bde0: 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e  uffer allocated.
bdf0: 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70   Move.  ** the p
be00: 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20  ointer to ctx.s 
be10: 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
be20: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ser-function can
be30: 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c   use.  ** the al
be40: 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
be50: 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
be60: 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e  f allocating a n
be70: 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 6d  ew one..  */.  m
be80: 65 6d 63 70 79 28 26 63 74 78 2e 73 2c 20 70 4f  emcpy(&ctx.s, pO
be90: 75 74 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29  ut, sizeof(Mem))
bea0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
beb0: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f  = MEM_Null;.  pO
bec0: 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
bed0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
bee0: 30 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  0;.  MemSetTypeF
bef0: 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f  lag(&ctx.s, MEM_
bf00: 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 66 45  Null);..  ctx.fE
bf10: 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
bf20: 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
bf30: 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49  funcFlags & SQLI
bf40: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
bf50: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
bf60: 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
bf70: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
bf80: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
bf90: 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
bfa0: 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
bfb0: 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
bfc0: 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
bfd0: 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
bfe0: 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52  .  }.  db->lastR
bff0: 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
c000: 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d  ;.  (*ctx.pFunc-
c010: 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c  >xFunc)(&ctx, n,
c020: 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
c030: 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
c040: 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  /.  lastRowid = 
c050: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a  db->lastRowid;..
c060: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
c070: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a  Failed ){.    /*
c080: 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d   Even though a m
c090: 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c  alloc() has fail
c0a0: 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ed, the implemen
c0b0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  tation of the.  
c0c0: 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69    ** user functi
c0d0: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c  on may have call
c0e0: 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65  ed an sqlite3_re
c0f0: 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74  sult_XXX() funct
c100: 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65  ion.    ** to re
c110: 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68  turn a value. Th
c120: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
c130: 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65   releases any re
c140: 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61  sources.    ** a
c150: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73  ssociated with s
c160: 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20  uch a value..   
c170: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
c180: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
c190: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
c1a0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
c1b0: 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f  * If the functio
c1c0: 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72  n returned an er
c1d0: 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78  ror, throw an ex
c1e0: 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28  ception */.  if(
c1f0: 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78   ctx.fErrorOrAux
c200: 20 29 7b 0a 20 20 20 20 69 66 28 20 63 74 78 2e   ){.    if( ctx.
c210: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
c220: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
c230: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
c240: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
c250: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
c260: 2e 73 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  .s));.      rc =
c270: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
c280: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
c290: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
c2a0: 28 70 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29  (p, pc, pOp->p1)
c2b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
c2c0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
c2d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
c2e0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
c2f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
c300: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78  ngeEncoding(&ctx
c310: 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
c320: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66   assert( pOut->f
c330: 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
c340: 3b 0a 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c  ;.  memcpy(pOut,
c350: 20 26 63 74 78 2e 73 2c 20 73 69 7a 65 6f 66 28   &ctx.s, sizeof(
c360: 4d 65 6d 29 29 3b 0a 20 20 69 66 28 20 73 71 6c  Mem));.  if( sql
c370: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
c380: 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67  g(pOut) ){.    g
c390: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
c3a0: 0a 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65  ..#if 0.  /* The
c3b0: 20 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e   app-defined fun
c3c0: 63 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73  ction has done s
c3d0: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73  omething that as
c3e0: 20 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a   caused this.  *
c3f0: 2a 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  * statement to e
c400: 78 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73  xpire.  (Perhaps
c410: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   the function ca
c420: 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65  lled sqlite3_exe
c430: 63 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20  c().  ** with a 
c440: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
c450: 74 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20  tement.).  */.  
c460: 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
c470: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
c480: 52 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45  RT;.#endif..  RE
c490: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c4a0: 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
c4b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
c4c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
c4d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c4e0: 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33   BitAnd P1 P2 P3
c4f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c500: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  :  r[P3]=r[P1]&r
c510: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c520: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
c530: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
c540: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
c550: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
c560: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c570: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c580: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c590: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c5a0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c5b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
c5c0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c5d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
c5e0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
c5f0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
c600: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
c610: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c620: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c630: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c640: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c650: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c660: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c670: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c680: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c690: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
c6a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c6b0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c6c0: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
c6d0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
c6e0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
c6f0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
c700: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
c710: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
c720: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
c730: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
c740: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
c750: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c760: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c770: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c780: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c790: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c7a0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
c7b0: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
c7c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c7d0: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
c7e0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
c7f0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
c800: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
c810: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
c820: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
c830: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
c840: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
c850: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c860: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
c870: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c880: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c890: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c8a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c8b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
c8c0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
c8d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c8e0: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
c8f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
c900: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
c910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c920: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
c930: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c940: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
c950: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
c960: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c970: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
c980: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
c990: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
c9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c9b0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
c9c0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c9d0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
c9e0: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
c9f0: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
ca00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ca10: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
ca20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
ca30: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
ca40: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
ca50: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
ca60: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
ca70: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
ca80: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
ca90: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
caa0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
cab0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
cac0: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
cad0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cae0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
caf0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
cb00: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
cb10: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
cb20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
cb30: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
cb40: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
cb50: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
cb60: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
cb70: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
cb80: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
cb90: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
cba0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
cbb0: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
cbc0: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
cbd0: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
cbe0: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
cbf0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
cc00: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
cc10: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
cc20: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
cc30: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
cc40: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
cc50: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
cc60: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
cc70: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
cc80: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
cc90: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
cca0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
ccb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
ccc0: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
ccd0: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
cce0: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
ccf0: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
cd00: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
cd10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cd20: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
cd30: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
cd40: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
cd50: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
cd60: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
cd70: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
cd80: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
cd90: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
cda0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
cdb0: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
cdc0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
cdd0: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
cde0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
cdf0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
ce00: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ce10: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ce20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
ce30: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
ce40: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
ce50: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d  ynopsis:  r[P1]=
ce60: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
ce70: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
ce80: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
ce90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
cea0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
ceb0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
cec0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
ced0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
cee0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
cef0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
cf00: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
cf10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
cf20: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
cf30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cf40: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
cf50: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cf60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
cf70: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
cf80: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
cf90: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
cfa0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
cfb0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
cfc0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
cfd0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cfe0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
cff0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d000: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
d010: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
d020: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
d030: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
d040: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
d050: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
d060: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
d070: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
d080: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
d090: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
d0a0: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
d0b0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d0c0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
d0d0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
d0e0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d0f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d100: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d110: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d120: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d130: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d140: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
d150: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d160: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
d170: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
d180: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
d190: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d1a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d1b0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
d1c0: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
d1d0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d1e0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
d1f0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
d200: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
d210: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d220: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
d230: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
d240: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
d250: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
d260: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
d270: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d280: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d290: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d2a0: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
d2b0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
d2c0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
d2d0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
d2e0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
d2f0: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
d300: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
d310: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
d320: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
d330: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
d340: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
d350: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
d360: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
d370: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
d380: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
d390: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
d3a0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
d3b0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
d3c0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
d3d0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
d3e0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
d3f0: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
d400: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d430: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d440: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d450: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
d460: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d470: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d480: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d490: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
d4a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
d4b0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
d4c0: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
d4d0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d4e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d4f0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
d500: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d510: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
d520: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
d530: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
d540: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
d550: 73 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62  sprintf().  Blob
d560: 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68   values are unch
d570: 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65  anged and.** are
d580: 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70   afterwards simp
d590: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
d5a0: 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20  s text..**.** A 
d5b0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d5c0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d5d0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d5e0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d5f0: 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20  case OP_ToText: 
d600: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d610: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d620: 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f  _TO_TEXT, in1 */
d630: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d640: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d660: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn1);.  if( pIn
d670: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
d680: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 61  ull ) break;.  a
d690: 73 73 65 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d  ssert( MEM_Str==
d6a0: 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b  (MEM_Blob>>3) );
d6b0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  .  pIn1->flags |
d6c0: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
d6d0: 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61  EM_Blob)>>3;.  a
d6e0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d6f0: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
d700: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
d710: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
d720: 28 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74  (pIn1);.  assert
d730: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d740: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
d750: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
d760: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
d770: 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  ~(MEM_Int|MEM_Re
d780: 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  al|MEM_Blob|MEM_
d790: 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f  Zero);.  UPDATE_
d7a0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
d7b0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
d7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f  /* Opcode: ToBlo
d7d0: 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  b P1 * * * *.**.
d7e0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d7f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d800: 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a  1 to be a BLOB..
d810: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d820: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
d830: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
d840: 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72  ng first..** Str
d850: 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c 79 20  ings are simply 
d860: 72 65 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  reinterpreted as
d870: 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f 20 63   blobs with no c
d880: 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20  hange.** to the 
d890: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 2e  underlying data.
d8a0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
d8b0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
d8c0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
d8d0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
d8e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d8f0: 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  _ToBlob: {      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d910: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f  ame as TK_TO_BLO
d920: 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  B, in1 */.  pIn1
d930: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d940: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
d950: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
d960: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
d970: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d980: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
d990: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
d9a0: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
d9b0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
d9c0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
d9d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d9e0: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
d9f0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
da00: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
da10: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
da20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
da30: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
da40: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
da50: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
da60: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
da70: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
da80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
da90: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
daa0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
dab0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
dac0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
dad0: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
dae0: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
daf0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
db00: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
db10: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
db20: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
db30: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
db40: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
db50: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
db60: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
db70: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
db80: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
db90: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
dba0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
dbb0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
dbc0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
dbd0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
dbe0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
dbf0: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc10: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
dc20: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
dc30: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
dc40: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74  Op->p1];.  sqlit
dc50: 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66  e3VdbeMemNumerif
dc60: 79 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  y(pIn1);.  break
dc70: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dc80: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dc90: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  /../* Opcode: To
dca0: 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Int P1 * * * *.*
dcb0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
dcc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dcd0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
dce0: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
dcf0: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
dd00: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
dd10: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
dd20: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
dd30: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
dd40: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
dd50: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
dd60: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
dd70: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
dd80: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
dd90: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
dda0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
ddb0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
ddc0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
ddd0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
dde0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
ddf0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
de00: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
de10: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
de20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
de30: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
de40: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
de50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
de60: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
de70: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
de80: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
de90: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
dea0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
deb0: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66  eak;.}..#if !def
dec0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ded0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
dee0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
def0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
df00: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c  * Opcode: ToReal
df10: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
df20: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
df30: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
df40: 20 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e   to be a floatin
df50: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
df60: 2a 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20  ** If The value 
df70: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20  is currently an 
df80: 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74  integer, convert
df90: 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76   it..** If the v
dfa0: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
dfb0: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
dfc0: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e  vert it to an in
dfd0: 74 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a  teger using the.
dfe0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
dff0: 20 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72   atoi() and stor
e000: 65 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68  e 0.0 if no such
e010: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70   conversion is p
e020: 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  ossible..**.** A
e030: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
e040: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
e050: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
e060: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
e070: 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a  .case OP_ToReal:
e080: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e090: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e0a0: 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a  K_TO_REAL, in1 *
e0b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e0c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
e0d0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e0e0: 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 28 70   pIn1);.  if( (p
e0f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e100: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
e110: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
e120: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
e130: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
e140: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
e150: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e160: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
e170: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e180: 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a  NG_POINT) */../*
e190: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
e1a0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e1b0: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e1c0: 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  <r[P3] goto P2.*
e1d0: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
e1e0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
e1f0: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
e200: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
e210: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
e220: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
e230: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e240: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e250: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
e260: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
e270: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
e280: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
e290: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
e2a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
e2b0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
e2c0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
e2d0: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
e2e0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e2f0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
e300: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e310: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
e320: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
e330: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
e340: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
e350: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
e360: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
e370: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
e380: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
e390: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
e3a0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
e3b0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
e3c0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
e3d0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
e3e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
e3f0: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
e400: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
e410: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
e420: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
e430: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
e440: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
e450: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
e460: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
e470: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
e480: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
e490: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
e4a0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
e4b0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e4c0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
e4d0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
e4e0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
e4f0: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
e500: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
e510: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
e520: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
e530: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
e540: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
e550: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
e560: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
e570: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
e580: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
e590: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
e5a0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
e5b0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
e5c0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
e5d0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
e5e0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
e5f0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e600: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
e610: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
e620: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
e630: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
e640: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
e650: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
e660: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
e670: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
e680: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
e690: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
e6a0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
e6b0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
e6c0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e6d0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
e6e0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
e6f0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e700: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
e710: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
e720: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
e730: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
e740: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
e750: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
e760: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
e770: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
e780: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
e790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
e7a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
e7b0: 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69  ITE_NULLEQ bit i
e7c0: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
e7d0: 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  n NULL values ar
e7e0: 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  e considered.** 
e7f0: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
e800: 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74  ther, provided t
e810: 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20  hat they do not 
e820: 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43  have their MEM_C
e830: 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65  leared.** bit se
e840: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e850: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
e860: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e870: 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20  if r[P1]!=r[P3] 
e880: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e890: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e8a0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e8b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e8c0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e8d0: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e8e0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e8f0: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
e900: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
e910: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
e920: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
e930: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
e940: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e950: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e960: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e970: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e980: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e990: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e9a0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e9b0: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e9c0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e9d0: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e9e0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e9f0: 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65  false.  If eithe
ea00: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ea10: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
ea20: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66  t is true..** If
ea30: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
ea40: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
ea50: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
ea60: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
ea70: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
ea80: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
ea90: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
eaa0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
eab0: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
eac0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
ead0: 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67  f r[P1]==r[P3] g
eae0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
eaf0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
eb00: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
eb10: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
eb20: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
eb30: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
eb40: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
eb50: 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61   and P3 are equa
eb60: 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74  l..** See the Lt
eb70: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
eb80: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
eb90: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
eba0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
ebb0: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
ebc0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
ebd0: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
ebe0: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
ebf0: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
ec00: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
ec10: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
ec20: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
ec30: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
ec40: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
ec50: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
ec60: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
ec70: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
ec80: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
ec90: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
eca0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
ecb0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
ecc0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
ecd0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
ece0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
ecf0: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
ed00: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
ed10: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ed20: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
ed30: 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]<=r[P3] goto P2
ed40: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ed50: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ed60: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ed70: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ed80: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ed90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
eda0: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
edb0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
edc0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
edd0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ede0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
edf0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ee00: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ee10: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
ee20: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ee30: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
ee40: 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]>r[P3] goto
ee50: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
ee60: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
ee70: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
ee80: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
ee90: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eea0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eeb0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eec0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eed0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eee0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eef0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ef00: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ef10: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ef20: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
ef30: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ef40: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
ef50: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
ef60: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
ef70: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
ef80: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
ef90: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
efa0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
efb0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
efc0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
efd0: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
efe0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
eff0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
f000: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
f010: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
f020: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f030: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f050: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
f060: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f070: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
f080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f090: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
f0a0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f0b0: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
f0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f0d0: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
f0e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f0f0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
f100: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f110: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
f120: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f130: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
f140: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f150: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
f160: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f170: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
f180: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f190: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
f1a0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
f1b0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
f1c0: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
f1d0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
f1e0: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
f1f0: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
f200: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
f210: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
f220: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
f230: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
f240: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
f250: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
f260: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
f270: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
f280: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
f290: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
f2a0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
f2b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
f2c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
f2d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
f2e0: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
f2f0: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
f300: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
f310: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
f320: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
f330: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
f340: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
f350: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
f360: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f370: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
f380: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
f390: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f3a0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
f3b0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
f3c0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
f3d0: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
f3e0: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
f3f0: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
f400: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f410: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
f420: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
f430: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
f440: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
f450: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
f460: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
f470: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
f480: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
f490: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
f4a0: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
f4b0: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
f4c0: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f4d0: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
f4e0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d     if( (flags1&M
f4f0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
f500: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
f510: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f520: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f530: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f540: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f550: 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 0;  /* Resul
f560: 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ts are equal */.
f570: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
f580: 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f       res = 1;  /
f590: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f  * Results are no
f5a0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f5b0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f5c0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
f5d0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
f5e0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
f5f0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
f600: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
f610: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
f620: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
f630: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
f640: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
f650: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
f660: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
f670: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
f680: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f690: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
f6a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f6b0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
f6c0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f6d0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f6e0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f6f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f700: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f710: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f720: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f730: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f740: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f750: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f760: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
f770: 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a  p2-1;.        }.
f780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
f790: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
f7a0: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
f7b0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f7c0: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
f7d0: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
f7e0: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
f7f0: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
f800: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
f810: 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
f820: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
f830: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
f840: 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c  ing);.      appl
f850: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
f860: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
f870: 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  ng);.      if( d
f880: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
f890: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
f8a0: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
f8b0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f8c0: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
f8d0: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
f8e0: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
f8f0: 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e  pIn1);.    Expan
f900: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
f910: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
f920: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
f930: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
f940: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  ll);.  }.  switc
f950: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
f960: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
f970: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
f980: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f990: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
f9a0: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
f9b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f9c0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
f9d0: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
f9e0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f9f0: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
fa00: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
fa10: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
fa20: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
fa30: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
fa40: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
fa50: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
fa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
fa70: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
fa80: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
fa90: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
faa0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
fab0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
fac0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
fad0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
fae0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
faf0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
fb00: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
fb10: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
fb20: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
fb30: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
fb40: 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d  en(res!=0, (pOp-
fb50: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
fb60: 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69  LEQ)?2:3);.    i
fb70: 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
fb80: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
fb90: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55      }.  }.  /* U
fba0: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
fbb0: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
fbc0: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
fbd0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
fbe0: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
fbf0: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
fc00: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
fc10: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
fc20: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
fc30: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
fc40: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
fc50: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
fc60: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
fc70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
fc80: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
fc90: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
fca0: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
fcb0: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
fcc0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
fcd0: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
fce0: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
fcf0: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
fd00: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
fd10: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
fd20: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
fd30: 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
fd40: 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
fd50: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
fd60: 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
fd70: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
fd80: 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
fd90: 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
fda0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
fdb0: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
fdc0: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
fdd0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
fde0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
fdf0: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
fe00: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
fe10: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
fe20: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
fe30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fe40: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
fe50: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
fe60: 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c  psis: r[P1@P3] <
fe70: 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  -> r[P2@P3].**.*
fe80: 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
fe90: 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
fea0: 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
feb0: 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
fec0: 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
fed0: 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
fee0: 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
fef0: 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
ff00: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
ff10: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
ff20: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
ff30: 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
ff40: 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
ff50: 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
ff60: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
ff70: 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
ff80: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
ff90: 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
ffa0: 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
ffb0: 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
ffc0: 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
ffd0: 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
ffe0: 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
fff0: 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
10000 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
10010 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
10020 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
10030 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
10040 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
10050 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
10060 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
10070 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
10080 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
10090 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
100a0 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
100b0 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
100c0 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
100d0 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
100e0 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
100f0 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
10100 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
10110 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
10120 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
10130 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
10140 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
10150 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
10160 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
10170 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
10180 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
10190 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
101a0 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
101b0 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
101c0 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
101d0 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
101e0 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
101f0 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
10200 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
10210 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
10220 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
10230 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
10240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10250 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
10260 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
10270 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
10280 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
10290 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
102a0 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
102b0 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
102c0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
102d0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
102e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
102f0 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
10300 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
10310 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
10320 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10330 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10340 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10350 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10360 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10370 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10380 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10390 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
103a0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
103b0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
103c0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
103d0 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
103e0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
103f0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
10400 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
10410 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
10420 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10430 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
10440 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
10450 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10460 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
10470 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10480 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
10490 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
104a0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
104b0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
104c0 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
104d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
104e0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
104f0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10500 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
10510 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
10520 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
10530 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
10540 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10550 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
10560 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
10570 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
10580 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
10590 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
105a0 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
105b0 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
105c0 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
105d0 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
105e0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
105f0 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  are(&aMem[p1+idx
10600 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  ], &aMem[p2+idx]
10610 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
10620 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
10630 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
10640 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
10650 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
10660 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
10670 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
10680 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10690 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
106a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
106b0 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
106c0 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
106d0 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
106e0 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
106f0 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
10700 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
10710 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
10720 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
10730 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
10740 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
10750 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
10760 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
10770 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
10780 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
10790 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
107a0 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
107b0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
107c0 70 31 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p1 - 1;  VdbeBra
107d0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20  nchTaken(0,3);. 
107e0 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
107f0 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  are==0 ){.    pc
10800 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
10810 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10820 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (1,3);.  }else{.
10830 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33      pc = pOp->p3
10840 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
10850 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d  hTaken(2,3);.  }
10860 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10870 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
10880 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
10890 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
108a0 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
108b0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
108c0 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
108d0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
108e0 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
108f0 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
10900 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
10910 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10920 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10930 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
10940 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10950 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
10960 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10970 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
10980 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
10990 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
109a0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
109b0 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
109c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
109d0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
109e0 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
109f0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
10a00 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
10a10 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
10a20 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10a30 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
10a40 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
10a50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10a60 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
10a70 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
10a80 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10a90 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
10aa0 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
10ab0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
10ac0 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
10ad0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
10ae0 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
10af0 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
10b00 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
10b10 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
10b20 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
10b30 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
10b40 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10b50 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
10b60 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10b70 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
10b80 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
10b90 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
10ba0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
10bb0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
10bc0 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
10bd0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
10be0 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
10bf0 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
10c00 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
10c10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10c20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10c30 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10c40 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
10c50 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
10c60 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10c70 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
10c80 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
10c90 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
10ca0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
10cb0 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
10cc0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
10cd0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
10ce0 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
10cf0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
10d00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
10d10 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
10d20 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10d30 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
10d40 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
10d50 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
10d60 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
10d70 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10d80 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
10d90 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
10da0 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
10db0 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
10dc0 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
10dd0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
10de0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10df0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
10e00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
10e10 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
10e20 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10e30 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
10e40 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
10e50 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
10e60 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10e70 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
10e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10e90 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
10ea0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
10eb0 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
10ec0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
10ed0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
10ee0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
10ef0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
10f00 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
10f10 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
10f20 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
10f30 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
10f40 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10f50 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
10f60 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
10f70 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
10f80 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
10f90 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10fa0 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
10fb0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
10fc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10fd0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
10fe0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10ff0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11000 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
11010 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
11020 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
11030 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
11040 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
11050 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
11060 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11070 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11080 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11090 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
110a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
110b0 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
110c0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
110d0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
110e0 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
110f0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
11100 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
11110 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
11120 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
11130 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11140 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11150 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11160 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11170 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11180 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11190 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
111a0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
111b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
111c0 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
111d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
111e0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
111f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11200 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11210 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
11220 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
11230 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
11240 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
11250 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11260 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
11270 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
11280 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
11290 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f  **.** Check if O
112a0 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69  P_Once flag P1 i
112b0 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75  s set. If so, ju
112c0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
112d0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
112e0 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67  .** set the flag
112f0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
11300 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
11310 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  struction.  In o
11320 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74  ther words,.** t
11330 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
11340 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20  s all following 
11350 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75  opcodes up throu
11360 67 68 20 50 32 20 28 62 75 74 20 6e 6f 74 20 69  gh P2 (but not i
11370 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 50 32 29 20  ncluding.** P2) 
11380 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65  to run just once
11390 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70   and to be skipp
113a0 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
113b0 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74   times through t
113c0 68 65 20 6c 6f 6f 70 2e 0a 2a 2f 0a 63 61 73 65  he loop..*/.case
113d0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
113e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
113f0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11400 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
11410 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
11420 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
11430 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
11440 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
11450 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11460 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11470 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
11480 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
11490 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
114a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
114b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
114c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
114d0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
114e0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
114f0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
11500 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11510 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
11520 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
11530 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
11540 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11550 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11560 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11570 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  mp if P3 is non-
11580 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
11590 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
115a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
115b0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
115c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
115d0 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
115e0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
115f0 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
11600 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
11610 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
11620 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
11630 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
11640 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
11650 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 7a 65  jump if P3 is ze
11660 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
11670 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
11680 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11690 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
116a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
116b0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
116c0 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
116d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
116e0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
116f0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11700 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
11710 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
11720 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
11730 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
11740 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11750 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
11760 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
11770 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
11780 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
11790 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
117a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
117b0 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
117c0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
117d0 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
117e0 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
117f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11800 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11810 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
11820 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
11830 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
11840 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
11850 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
11860 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11870 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11880 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
11890 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
118a0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
118b0 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
118c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
118d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
118e0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
118f0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11900 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11910 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
11920 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11930 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
11940 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11950 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11960 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
11970 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
11980 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11990 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
119a0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
119b0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
119c0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
119d0 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
119e0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
119f0 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
11a00 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11a10 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
11a20 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
11a30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11a40 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11a50 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
11a60 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
11a70 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
11a80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11a90 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
11aa0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
11ab0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11ac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
11ad0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
11ae0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
11af0 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
11b00 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
11b10 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
11b20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
11b30 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
11b40 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
11b50 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
11b60 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
11b70 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
11b80 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
11b90 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11ba0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
11bb0 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
11bc0 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
11bd0 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
11be0 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
11bf0 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
11c00 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
11c10 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
11c20 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
11c30 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
11c40 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
11c50 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
11c60 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
11c70 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
11c80 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
11c90 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
11ca0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11cb0 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
11cc0 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
11cd0 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
11ce0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
11cf0 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
11d00 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
11d10 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
11d20 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
11d30 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
11d40 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
11d50 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
11d60 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
11d70 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
11d80 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
11d90 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
11da0 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
11db0 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
11dc0 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
11dd0 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
11de0 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
11df0 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
11e00 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
11e10 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
11e20 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
11e30 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
11e40 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
11e50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
11e60 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
11e70 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
11e80 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
11e90 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
11ea0 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
11eb0 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
11ec0 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
11ed0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11ee0 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
11ef0 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
11f00 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
11f10 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
11f20 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
11f30 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
11f40 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
11f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
11f60 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f  n: {.  i64 paylo
11f70 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
11f80 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11f90 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11fa0 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
11fb0 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
11fc0 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
11fd0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
11fe0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
11ff0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
12000 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
12010 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
12020 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
12030 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f  *aType;        /
12040 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73  * aType[i] holds
12050 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
12060 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f  e of the i-th co
12070 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61  lumn */.  u32 *a
12080 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
12090 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
120a0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
120b0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
120c0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
120d0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
120e0 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
120f0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
12100 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
12110 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
12120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
12130 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
12140 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
12150 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
12160 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
12170 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
12180 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
12190 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
121a0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
121b0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
121c0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
121d0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
121e0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
121f0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
12200 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
12210 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
12220 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
12230 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12240 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
12250 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
12260 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
12270 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
12280 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
12290 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
122a0 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65  a */.  u32 szFie
122b0 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ld;       /* Num
122c0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
122d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
122e0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20   field */.  u32 
122f0 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f  avail;         /
12300 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12310 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
12320 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  ata */.  u32 t; 
12330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
12340 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
12350 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
12360 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  r */.  Mem *pReg
12370 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
12380 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
12390 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32  egister */..  p2
123a0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
123b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
123c0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
123d0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
123e0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
123f0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
12400 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
12410 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
12420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
12430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
12440 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
12450 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
12460 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
12470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
12480 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
12490 3b 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e  ;.  aType = pC->
124a0 61 54 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74  aType;.  aOffset
124b0 20 3d 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e   = aType + pC->n
124c0 46 69 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53  Field;.#ifndef S
124d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
124e0 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
124f0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
12500 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f  r==0 ); /* OP_Co
12510 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65  lumn never calle
12520 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62  d on virtual tab
12530 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70  le */.#endif.  p
12540 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
12550 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
12560 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  rsr!=0 || pC->ps
12570 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
12580 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20  ; /* pCrsr NULL 
12590 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
125a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  */.  assert( pCr
125b0 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  sr!=0 || pC->nul
125c0 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20  lRow );         
125d0 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   /* pC->nullRow 
125e0 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
125f0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
12600 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
12610 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
12620 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
12630 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12640 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
12650 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
12660 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
12670 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
12680 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
12690 63 61 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70  cacheCtr || (pOp
126a0 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
126b0 52 43 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20  RCACHE)!=0 ){.  
126c0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
126d0 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
126e0 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Crsr==0 ){.     
126f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
12700 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20  seudoTableReg>0 
12710 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
12720 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75  = &aMem[pC->pseu
12730 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20  doTableReg];.   
12740 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
12750 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
12760 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  lob );.        a
12770 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
12780 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20  d(pReg) );.     
12790 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
127a0 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d  ze = pC->szRow =
127b0 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e   avail = pReg->n
127c0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
127d0 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
127e0 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
127f0 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
12800 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
12810 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
12820 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12830 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
12840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
12850 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
12860 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54       if( pC->isT
12870 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  able==0 ){.     
12880 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12890 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
128a0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
128b0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
128c0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
128d0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
128e0 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
128f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
12900 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12910 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75  ); /* True becau
12920 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
12930 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
12940 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71  */.        /* sq
12950 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
12960 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
12970 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
12980 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
12990 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
129a0 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
129b0 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
129c0 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
129d0 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65          ** large
129e0 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
129f0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
12a00 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
12a10 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
12a20 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
12a30 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
12a40 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
12a50 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
12a60 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
12a70 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
12a80 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
12a90 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
12aa0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12ab0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
12ac0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
12ad0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
12ae0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
12af0 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
12b00 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
12b10 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61  rsr, &pC->payloa
12b20 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20  dSize);.        
12b30 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
12b40 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
12b50 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
12b60 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  fail */.        
12b70 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
12b80 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
12b90 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12ba0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
12bb0 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35  ssert( avail<=65
12bc0 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
12bd0 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
12be0 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
12bf0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12c00 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
12c10 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
12c20 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c  szRow = pC->payl
12c30 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d  oadSize;.      }
12c40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
12c50 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b  ->szRow = avail;
12c60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
12c70 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
12c80 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
12c90 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
12ca0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
12cb0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
12cc0 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
12cd0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
12ce0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
12cf0 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
12d00 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
12d10 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f  nt32(pC->aRow, o
12d20 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e  ffset);.    pC->
12d30 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
12d40 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d      aOffset[0] =
12d50 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28   offset;.    if(
12d60 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
12d70 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
12d80 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
12d90 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
12da0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
12db0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
12dc0 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
12dd0 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
12de0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
12df0 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
12e00 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
12e10 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
12e20 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
12e30 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
12e40 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
12e50 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
12e60 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
12e70 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
12e80 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12e90 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12ea0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
12eb0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12ec0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12ed0 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12ee0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
12ef0 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
12f00 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
12f10 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
12f20 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
12f30 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
12f40 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
12f50 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
12f60 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
12f70 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12f80 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12f90 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12fa0 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12fb0 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12fc0 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12fd0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12fe0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
12ff0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
13000 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
13010 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
13020 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
13030 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
13040 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
13050 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
13060 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
13070 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
13080 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
13090 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
130a0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
130b0 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
130c0 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
130d0 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
130e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
130f0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
13100 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13110 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  n_error;.    }. 
13120 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
13130 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
13140 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
13150 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
13160 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
13170 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
13180 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
13190 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
131a0 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20   aType[]..  */. 
131b0 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
131c0 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
131d0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
131e0 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
131f0 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
13200 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
13210 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
13220 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
13230 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
13240 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
13250 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
13260 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
13270 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
13280 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
13290 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
132a0 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
132b0 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
132c0 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
132d0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
132e0 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
132f0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
13300 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
13310 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
13320 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
13330 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
13340 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20   aOffset[0], .  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c     !pC->isTable,
13380 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
13390 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
133a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
133b0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
133c0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
133d0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
133e0 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
133f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13400 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
13410 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
13420 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
13430 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
13440 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
13450 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
13460 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20   field. */.     
13470 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
13480 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
13490 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a  t = aOffset[i];.
134a0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61        zHdr = zDa
134b0 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66  ta + pC->iHdrOff
134c0 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48  set;.      zEndH
134d0 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66  dr = zData + aOf
134e0 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61  fset[0];.      a
134f0 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20  ssert( i<=p2 && 
13500 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
13510 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
13520 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78    if( zHdr[0]<0x
13530 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
13540 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20  t = zHdr[0];.   
13550 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
13560 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
13570 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20          zHdr += 
13580 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
13590 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20  32(zHdr, &t);.  
135a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
135b0 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
135c0 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
135d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
135e0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
135f0 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
13600 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20  zField;.        
13610 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65  if( offset<szFie
13620 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69  ld ){  /* True i
13630 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f  f offset overflo
13640 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ws */.          
13650 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b  zHdr = &zEndHdr[
13660 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53  1];  /* Forces S
13670 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65  QLITE_CORRUPT re
13680 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  turn below */.  
13690 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
136a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
136b0 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f   i++;.        aO
136c0 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
136d0 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  t;.      }while(
136e0 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
136f0 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
13700 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13710 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
13720 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
13730 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
13740 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
13750 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
13760 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
13770 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
13780 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67         sMem.flag
13790 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
137a0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
137b0 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61  * If we have rea
137c0 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61  d more header da
137d0 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74  ta than was cont
137e0 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61  ained in the hea
137f0 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72  der,.      ** or
13800 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
13810 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
13820 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
13830 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
13840 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c        ** record,
13850 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
13860 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
13870 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
13880 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
13890 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
138a0 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66  cord (when all f
138b0 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20  ields present), 
138c0 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20  then we must be 
138d0 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a  dealing .      *
138e0 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
138f0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
13900 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
13910 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20  Hdr > zEndHdr). 
13920 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
13930 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13940 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a  ze).       || (z
13950 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr==zEndHdr && 
13960 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c  offset!=pC->payl
13970 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
13980 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13990 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
139a0 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
139b0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
139c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
139d0 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
139e0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
139f0 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
13a00 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
13a10 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
13a20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
13a30 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
13a40 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
13a50 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
13a60 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
13a70 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
13a80 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
13a90 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
13aa0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
13ab0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
13ac0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13ad0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
13ae0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
13af0 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
13b00 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
13b10 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
13b20 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
13b30 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
13b40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65  else{.        Me
13b50 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
13b60 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
13b70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
13b80 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
13ba0 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e   Extract the con
13bb0 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b  tent for the p2+
13bc0 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  1-th column.  Co
13bd0 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20  ntrol can only. 
13be0 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70   ** reach this p
13bf0 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b  oint if aOffset[
13c00 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b  p2], aOffset[p2+
13c10 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32  1], and aType[p2
13c20 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
13c30 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
13c40 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
13c50 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
13c60 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
13c70 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
13c80 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
13c90 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
13ca0 73 74 29 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  st) );.  if( pC-
13cb0 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
13cc0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
13cd0 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
13ce0 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
13cf0 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
13d00 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
13d10 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
13d20 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
13d30 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
13d40 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
13d50 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
13d60 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a  Release(pDest);.
13d70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13d80 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f  erialGet(pC->aRo
13d90 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  w+aOffset[p2], a
13da0 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
13db0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
13dc0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
13dd0 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
13de0 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
13df0 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a  erflow pages */.
13e00 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32      t = aType[p2
13e10 5d 3b 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  ];.    if( ((pOp
13e20 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
13e30 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
13e40 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
13e50 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
13e60 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
13e70 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
13e80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13e90 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
13ea0 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13eb0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13ec0 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
13ed0 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
13ee0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74  irrelevant for t
13ef0 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  he typeof() func
13f00 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20  tion and for.   
13f10 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68     ** the length
13f20 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
13f30 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f  X is a blob.  So
13f40 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
13f50 6c 20 75 73 65 0a 20 20 20 20 20 20 2a 2a 20 62  l use.      ** b
13f60 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
13f70 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
13f80 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13f90 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a  sk.  NULL works.
13fa0 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78        ** for tex
13fb0 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77  t and blob and w
13fc0 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74 68  hatever is in th
13fd0 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  e payloadSize64 
13fe0 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a  variable.      *
13ff0 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  * will work for 
14000 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e  everything else.
14010 20 20 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73    Content is als
14020 6f 20 69 72 72 65 6c 65 76 61 6e 74 20 69 66 0a  o irrelevant if.
14030 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e        ** the con
14040 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 30  tent length is 0
14050 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61  . */.      zData
14060 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29   = t<=13 ? (u8*)
14070 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
14080 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a   0;.      sMem.z
14090 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
140a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
140b0 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
140c0 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
140d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
140e0 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
140f0 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
14100 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14110 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
14120 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
14130 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20   !pC->isTable,. 
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20    &sMem);.      
14170 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
14180 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
14190 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
141a0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
141b0 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
141c0 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
141d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
141e0 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
141f0 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66  Dest);.    /* If
14200 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
14210 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
14220 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
14230 20 28 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20   (in the.    ** 
14240 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
14250 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61  omBtree() call a
14260 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73  bove) then trans
14270 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  fer control of t
14280 68 61 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d  hat.    ** dynam
14290 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
142a0 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
142b0 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
142c0 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73 20  re..    ** This 
142d0 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
142e0 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69  y copy. */.    i
142f0 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
14300 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
14310 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
14320 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20 61  alloc );.      a
14330 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
14340 6e 61 6d 69 63 28 70 44 65 73 74 29 3d 3d 30 20  namic(pDest)==0 
14350 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14360 20 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26   (pDest->flags &
14370 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
14380 74 72 29 29 3d 3d 30 20 7c 7c 20 70 44 65 73 74  tr))==0 || pDest
14390 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20  ->z==sMem.z );. 
143a0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
143b0 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
143c0 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
143d0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
143e0 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
143f0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
14400 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65  Mem.z;.      pDe
14410 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d  st->zMalloc = sM
14420 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  em.zMalloc;.    
14430 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65  }.  }.  pDest->e
14440 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a  nc = encoding;..
14450 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
14460 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
14470 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d  pDest);.op_colum
14480 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54  n_error:.  UPDAT
14490 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
144a0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
144b0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
144c0 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
144d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
144e0 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
144f0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
14500 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
14510 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
14520 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
14530 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
14540 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
14550 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
14560 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
14570 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14580 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
14590 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
145a0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
145b0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
145c0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
145d0 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
145e0 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
145f0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
14600 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
14610 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
14620 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
14630 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
14640 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
14650 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
14660 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
14670 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
14680 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
14690 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
146a0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
146b0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
146c0 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
146d0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
146e0 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
146f0 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
14700 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
14710 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
14720 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
14730 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
14740 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
14750 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
14760 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
14770 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14780 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
14790 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
147a0 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
147b0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
147c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
147d0 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
147e0 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
147f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
14800 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
14810 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
14820 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
14830 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
14840 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
14850 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
14860 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
14870 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
14880 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
14890 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
148a0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
148b0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
148c0 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
148d0 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
148e0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
148f0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
14900 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
14910 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14920 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14930 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14940 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14950 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14960 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
14970 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
14980 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
14990 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
149a0 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
149b0 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
149c0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
149d0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
149e0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
149f0 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
14a00 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
14a10 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
14a20 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
14a30 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
14a40 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
14a50 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
14a60 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
14a70 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
14a80 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
14a90 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
14aa0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
14ab0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
14ac0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
14ad0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
14ae0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14af0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
14b00 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14b30 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
14b40 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14b60 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
14b70 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
14b80 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
14b90 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
14ba0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
14bb0 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
14bc0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14bd0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
14be0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14bf0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14c00 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
14c10 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
14c20 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
14c30 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
14c40 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
14c50 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
14c60 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
14c70 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
14c80 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
14c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
14ca0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
14cb0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14cc0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
14cd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14ce0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
14cf0 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
14d00 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
14d10 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
14d20 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
14d30 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14d40 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
14d50 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
14d60 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
14d70 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
14d80 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
14d90 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
14da0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
14db0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
14dc0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
14dd0 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
14de0 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
14df0 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69  ] content */.  i
14e00 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
14e10 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
14e20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
14e30 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
14e40 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14e50 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
14e60 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
14e70 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
14e80 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
14e90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ed0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
14ee0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
14ef0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
14f00 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
14f10 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
14f20 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
14f30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f70 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
14f80 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
14f90 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
14fa0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
14fb0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
14fc0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
14fd0 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
14fe0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
14ff0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
15000 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
15010 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
15020 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
15030 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
15040 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
15050 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
15060 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
15070 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
15080 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
15090 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
150a0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
150b0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
150c0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
150d0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
150e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
150f0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
15100 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
15110 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
15120 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15130 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15140 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
15150 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15160 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
15170 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
15180 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
15190 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
151a0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
151b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
151c0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
151d0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
151e0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
151f0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
15200 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  r)+1 );.  pData0
15210 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
15220 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
15230 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
15240 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
15250 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
15260 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
15270 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
15280 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
15290 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
152a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
152b0 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
152c0 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
152d0 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
152e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
152f0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
15300 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
15310 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72    /* Apply the r
15320 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74  equested affinit
15330 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a  y to all inputs.
15340 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
15350 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
15360 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20    if( zAffinity 
15370 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44  ){.    pRec = pD
15380 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20  ata0;.    do{.  
15390 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
153a0 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66  y(pRec++, *(zAff
153b0 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
153c0 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ng);.      asser
153d0 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
153e0 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
153f0 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
15400 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
15410 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  .  }..  /* Loop 
15420 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
15430 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
15440 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
15450 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
15460 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
15470 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
15480 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
15490 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20  rd..  */.  pRec 
154a0 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20  = pLast;.  do{. 
154b0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
154c0 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
154d0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
154e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
154f0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
15500 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c  e_format);.    l
15510 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
15520 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65  SerialTypeLen(se
15530 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
15540 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
15550 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
15560 20 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b      if( nData ){
15570 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
15580 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
15590 62 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  b(pRec);.      }
155a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a  else{.        nZ
155b0 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
155c0 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65  Zero;.        le
155d0 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  n -= pRec->u.nZe
155e0 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ro;.      }.    
155f0 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  }.    nData += l
15600 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  en;.    testcase
15610 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
15620 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  27 );.    testca
15630 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
15640 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72  =128 );.    nHdr
15650 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c   += serial_type<
15660 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74  =127 ? 1 : sqlit
15670 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
15680 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69  al_type);.  }whi
15690 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44  le( (--pRec)>=pD
156a0 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64  ata0 );..  /* Ad
156b0 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
156c0 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
156d0 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
156e0 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  /.  testcase( nH
156f0 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73  dr==126 );.  tes
15700 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37  tcase( nHdr==127
15710 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d   );.  if( nHdr<=
15720 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  126 ){.    /* Th
15730 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f  e common case */
15740 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a  .    nHdr += 1;.
15750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
15760 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72  Rare case of a r
15770 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64  eally large head
15780 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e  er */.    nVarin
15790 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
157a0 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20  tLen(nHdr);.    
157b0 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b  nHdr += nVarint;
157c0 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74  .    if( nVarint
157d0 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
157e0 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b  n(nHdr) ) nHdr++
157f0 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
15800 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66  nHdr+nData;.  if
15810 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
15820 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
15830 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
15840 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
15850 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
15860 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15870 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
15880 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
15890 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
158a0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
158b0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
158c0 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
158d0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
158e0 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
158f0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
15900 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
15910 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
15920 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
15930 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20  MemGrow() could 
15940 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
15950 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
15960 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
15970 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
15980 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
15990 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
159a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
159b0 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
159c0 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
159d0 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
159e0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
159f0 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
15a00 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
15a10 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
15a20 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
15a30 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
15a40 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
15a50 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71  serial_type = sq
15a60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15a70 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66  ype(pRec, file_f
15a80 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d  ormat);.    i +=
15a90 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e   putVarint32(&zN
15aa0 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72  ewRecord[i], ser
15ab0 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20  ial_type);      
15ac0 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
15ad0 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  type */.    j +=
15ae0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15af0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
15b00 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
15b10 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
15b20 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
15b30 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
15b40 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
15b50 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
15b60 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
15b70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15b80 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
15b90 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
15ba0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
15bb0 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
15bc0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
15bd0 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 70 4f 75   MEM_Blob;.  pOu
15be0 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
15bf0 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
15c00 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
15c10 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
15c20 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
15c30 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
15c40 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
15c50 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
15c60 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
15c70 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
15c80 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
15c90 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
15ca0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
15cb0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
15cc0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
15cd0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
15ce0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
15cf0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
15d00 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
15d10 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
15d20 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
15d30 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
15d40 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
15d50 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
15d60 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
15d70 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
15d80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15d90 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
15da0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
15db0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
15dc0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20  elease */.  i64 
15dd0 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
15de0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43  or *pCrsr;..  pC
15df0 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
15e00 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72  Op->p1]->pCursor
15e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
15e20 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20  r );.  nEntry = 
15e30 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
15e40 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
15e50 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
15e60 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
15e70 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
15e80 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
15e90 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
15ea0 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
15eb0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
15ec0 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
15ed0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
15ee0 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
15ef0 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
15f00 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
15f10 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
15f20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
15f30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
15f40 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
15f50 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e  avepoint, P1==0.
15f60 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   To release (com
15f70 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74  mit) an.** exist
15f80 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  ing savepoint, P
15f90 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c  1==1, or to roll
15fa0 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
15fb0 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32   savepoint P1==2
15fc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76  ..*/.case OP_Sav
15fd0 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  epoint: {.  int 
15fe0 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p1;             
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16000 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61  alue of P1 opera
16010 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  nd */.  char *zN
16020 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
16030 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
16040 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
16050 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53    int nName;.  S
16060 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a  avepoint *pNew;.
16070 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
16080 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70  vepoint;.  Savep
16090 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e  oint *pTmp;.  in
160a0 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  t iSavepoint;.  
160b0 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20  int ii;..  p1 = 
160c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65  pOp->p1;.  zName
160d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20   = pOp->p4.z;.. 
160e0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
160f0 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72  the p1 parameter
16100 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20   is valid. Also 
16110 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73  that if there is
16120 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72   no open.  ** tr
16130 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
16140 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20  there cannot be 
16150 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20  any savepoints. 
16160 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
16170 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d  db->pSavepoint==
16180 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  0 || db->autoCom
16190 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
161a0 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
161b0 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56  T_BEGIN||p1==SAV
161c0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c  EPOINT_RELEASE||
161d0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
161e0 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65  LLBACK );.  asse
161f0 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
16200 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e  nt || db->isTran
16210 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
16220 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16230 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
16240 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73  ount(db) );.  as
16250 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
16260 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  er );..  if( p1=
16270 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
16280 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
16290 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
162a0 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
162b0 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
162c0 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
162d0 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
162e0 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
162f0 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
16300 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
16310 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
16320 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
16330 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
16340 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16350 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
16360 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
16370 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  nt - ".        "
16380 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
16390 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
163a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
163b0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
163c0 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
163d0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
163e0 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
163f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
16400 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
16410 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
16420 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
16430 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
16440 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
16450 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
16460 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
16470 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
16480 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
16490 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
164a0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
164b0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
164c0 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
164d0 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
164e0 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
164f0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
16500 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
16510 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
16520 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
16530 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
16540 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
16550 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
16560 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
16570 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
16580 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
165b0 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
165c0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
165d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
165e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
165f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
16600 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
16610 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
16620 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
16630 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
16640 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
16650 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  w(db, sizeof(Sav
16660 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
16670 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
16680 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
16690 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
166a0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
166b0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
166c0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
166d0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
166e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
166f0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
16700 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
16710 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
16720 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
16730 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
16740 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
16750 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
16760 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
16770 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16780 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
16790 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
167a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
167b0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
167c0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
167d0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
167e0 20 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20        }.    .   
167f0 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
16800 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
16810 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
16820 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
16830 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
16840 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
16850 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
16860 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16870 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
16880 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
16890 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
168a0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
168b0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
168c0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
168d0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
168e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
168f0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
16900 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
16910 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
16920 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
16930 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
16940 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
16950 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
16960 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
16970 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
16980 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
16990 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
169a0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
169b0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
169c0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
169d0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
169e0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
169f0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
16a00 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16a10 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
16a20 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16a30 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
16a40 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
16a50 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16a60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16a70 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
16a80 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
16a90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16aa0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
16ab0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
16ac0 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
16ad0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16ae0 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
16af0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
16b00 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
16b10 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
16b20 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
16b30 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
16b40 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
16b50 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16b60 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
16b70 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
16b80 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  b, .        "can
16b90 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65  not release save
16ba0 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
16bb0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
16bc0 73 73 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  ss".      );.   
16bd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
16be0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
16bf0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
16c00 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
16c10 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
16c20 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16c30 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
16c40 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
16c50 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
16c60 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
16c70 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
16c80 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
16c90 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
16ca0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
16cb0 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
16cc0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
16cd0 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
16ce0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
16cf0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
16d00 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
16d10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16d20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
16d30 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
16d40 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
16d50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
16d60 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
16d70 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
16d80 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
16d90 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
16da0 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16db0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
16dc0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
16dd0 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
16de0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64   pc;.          d
16df0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16e00 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
16e10 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
16e20 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
16e30 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16e40 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
16e50 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
16e60 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
16e70 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
16e80 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
16e90 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53  else{.        iS
16ea0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
16eb0 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
16ec0 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
16ed0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
16ee0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
16ef0 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
16f00 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
16f10 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
16f20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
16f30 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
16f40 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
16f50 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a   SQLITE_ABORT);.
16f60 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
16f70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
16f80 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
16f90 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
16fa0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
16fb0 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
16fc0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
16fd0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
16fe0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
16ff0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17000 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
17010 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17020 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
17030 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
17040 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
17050 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
17060 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
17070 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
17080 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
17090 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
170a0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
170b0 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
170c0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
170d0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
170e0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20  tion(db);.      
170f0 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20      db->flags = 
17100 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c  (db->flags | SQL
17110 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
17120 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  s);.        }.  
17130 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
17140 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
17150 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
17160 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
17170 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
17180 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
17190 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
171a0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
171b0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
171c0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
171d0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
171e0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
171f0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
17200 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
17210 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
17220 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
17230 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
17240 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
17250 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
17260 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
17270 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
17280 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
17290 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
172a0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
172b0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
172c0 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20  perated on .    
172d0 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20    ** too. If it 
172e0 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  is a ROLLBACK TO
172f0 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e  , then set the n
17300 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
17310 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  d .      ** cons
17320 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
17330 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
17340 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
17350 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20   value stored.  
17360 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20      ** when the 
17370 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72  savepoint was cr
17380 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20  eated.  */.     
17390 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
173a0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
173b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53        assert( pS
173c0 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53  avepoint==db->pS
173d0 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20  avepoint );.    
173e0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
173f0 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
17400 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
17410 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
17420 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , pSavepoint);. 
17430 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72         if( !isTr
17440 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
17450 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
17460 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20  point--;.       
17470 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
17480 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
17490 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76  erredCons = pSav
174a0 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
174b0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64  dCons;.        d
174c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
174d0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
174e0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
174f0 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ns;.      }..   
17500 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
17510 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
17520 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
17530 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
17540 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
17550 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17560 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17570 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17580 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
17590 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
175a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
175b0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
175c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
175d0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
175e0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
175f0 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
17600 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
17610 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
17620 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
17630 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
17640 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
17650 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
17660 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
17670 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
17680 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
17690 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
176a0 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
176b0 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
176c0 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
176d0 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
176e0 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
176f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
17700 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
17710 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
17720 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
17730 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
17740 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
17750 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
17760 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
17770 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
17780 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
17790 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
177a0 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
177b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
177c0 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
177d0 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
177e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
177f0 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
17800 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
17810 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17820 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
17830 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
17840 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64   assert( db->nVd
17850 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f  beActive>0 );  /
17860 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
17870 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
17880 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
17890 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23  >bIsReader );..#
178a0 69 66 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f  if 0.  if( turnO
178b0 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b  nAC && iRollback
178c0 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74   && db->nVdbeAct
178d0 69 76 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20  ive>1 ){.    /* 
178e0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
178f0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
17900 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74   ROLLBACK and ot
17910 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20  her VMs are.    
17920 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  ** still running
17930 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74  , and a transact
17940 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72  ion is active, r
17950 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17960 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a  ndicating.    **
17970 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17980 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17990 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
179a0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
179b0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
179c0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72  g, db, "cannot r
179d0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
179e0 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
179f0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
17a00 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17a10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
17a20 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  USY;.  }else.#en
17a30 64 69 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e  dif.  if( turnOn
17a40 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b  AC && !iRollback
17a50 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69   && db->nVdbeWri
17a60 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  te>0 ){.    /* I
17a70 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17a80 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
17a90 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72  COMMIT and other
17aa0 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67   VMs are writing
17ab0 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61  .    ** return a
17ac0 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
17ad0 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
17ae0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
17af0 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
17b00 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
17b10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
17b20 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
17b30 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
17b40 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
17b50 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
17b60 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17b70 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
17b80 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
17b90 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17ba0 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
17bb0 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
17bc0 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
17bd0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
17be0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
17bf0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
17c00 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
17c10 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
17c20 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
17c30 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
17c40 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72      }else if( (r
17c50 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
17c60 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
17c70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17c80 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17c90 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  rn;.    }else{. 
17ca0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17cb0 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65  mit = (u8)desire
17cc0 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20  dAutoCommit;.   
17cd0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
17ce0 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
17cf0 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
17d00 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
17d10 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17d20 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
17d30 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17d40 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
17d50 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
17d60 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  SY;.        goto
17d70 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17d80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
17d90 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
17da0 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
17db0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
17dc0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
17dd0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
17de0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
17df0 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
17e00 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17e10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
17e20 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
17e30 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17e40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
17e50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17e60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a  p->zErrMsg, db,.
17e70 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
17e80 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
17e90 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
17ea0 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
17eb0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
17ec0 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
17ed0 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
17ee0 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
17ef0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
17f00 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
17f10 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
17f20 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
17f30 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
17f40 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
17f50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
17f60 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ROR;.  }.  break
17f70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17f80 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
17f90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
17fa0 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
17fb0 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65  tion on database
17fc0 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63   P1 if a transac
17fd0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65  tion is not alre
17fe0 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a  ady.** active..*
17ff0 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
18000 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
18010 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
18020 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20   started, or if 
18030 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73  a .** read-trans
18040 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64  action is alread
18050 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20  y active, it is 
18060 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72  upgraded to a wr
18070 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ite-transaction.
18080 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
18090 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74  o, then a read-t
180a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
180b0 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  arted..**.** P1 
180c0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
180d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
180e0 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
180f0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
18100 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
18110 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
18120 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
18130 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
18140 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
18150 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18160 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
18170 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
18180 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
18190 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
181a0 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
181b0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
181c0 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
181d0 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
181e0 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
181f0 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
18200 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
18210 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
18220 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
18230 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
18240 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
18250 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
18260 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
18270 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
18280 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
18290 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
182a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
182b0 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
182c0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
182d0 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
182e0 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
182f0 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
18300 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
18310 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
18320 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
18330 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
18340 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
18350 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
18360 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
18370 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
18380 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
18390 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
183a0 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
183b0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
183c0 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
183d0 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
183e0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
183f0 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
18400 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
18410 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
18420 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
18430 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20  P5!=0 then this 
18440 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63  opcode also chec
18450 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks the schema co
18460 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a  okie against P3.
18470 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d  ** and the schem
18480 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
18490 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e  nter against P4.
184a0 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
184b0 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
184c0 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
184d0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
184e0 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
184f0 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
18500 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
18510 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
18520 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
18530 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
18540 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
18550 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
18560 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20  schema.  If the 
18570 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65  schema.** cookie
18580 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66   in P3 differs f
18590 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63  rom the schema c
185a0 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74  ookie in the dat
185b0 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a  abase header or.
185c0 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ** if the schema
185d0 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
185e0 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72  ter in P4 differ
185f0 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  s from the curre
18600 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e  nt.** generation
18610 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61   counter, then a
18620 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
18630 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
18640 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  and execution.**
18650 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c   halts.  The sql
18660 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
18670 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  per function mig
18680 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72  ht then reprepar
18690 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65  e the.** stateme
186a0 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20  nt and rerun it 
186b0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
186c0 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ng..*/.case OP_T
186d0 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
186e0 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
186f0 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
18700 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Gen;..  assert( 
18710 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18720 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
18730 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
18740 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
18750 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
18760 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
18770 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
18780 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
18790 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
187a0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
187b0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
187c0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
187d0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
187e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
187f0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
18800 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18810 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
18820 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
18830 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
18840 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
18850 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18860 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
18870 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
18880 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
18890 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
188a0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
188b0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
188c0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
188d0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
188e0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
188f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18900 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18910 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18920 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
18930 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
18940 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
18950 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
18960 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
18970 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
18980 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18990 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
189a0 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
189b0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
189c0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
189d0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
189e0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
189f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
18a00 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
18a10 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
18a20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
18a30 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
18a40 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
18a50 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
18a60 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
18a70 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18a80 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18a90 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
18aa0 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
18ab0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18ac0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
18ad0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
18ae0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
18af0 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
18b00 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
18b10 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
18b20 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
18b30 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
18b40 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
18b50 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
18b60 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
18b70 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18b80 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
18b90 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
18ba0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
18bb0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
18bc0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
18bd0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
18be0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
18bf0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18c00 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
18c10 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
18c20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
18c30 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
18c40 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
18c50 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
18c60 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
18c70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ing */.    sqlit
18c80 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
18c90 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
18ca0 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
18cb0 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
18cc0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
18cd0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
18ce0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
18cf0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
18d00 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
18d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
18d20 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
18d30 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
18d40 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26    if( pOp->p5 &&
18d50 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
18d60 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
18d70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  4.i) ){.    sqli
18d80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
18d90 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
18da0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
18db0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
18dc0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
18dd0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
18de0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
18df0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
18e00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
18e10 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
18e20 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
18e30 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
18e40 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
18e50 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
18e60 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
18e70 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
18e80 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
18e90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
18ea0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
18eb0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
18ec0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
18ed0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
18ee0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
18ef0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
18f00 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
18f10 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
18f20 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
18f30 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
18f40 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
18f50 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
18f60 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
18f70 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
18f80 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
18f90 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
18fa0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
18fb0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
18fc0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
18fd0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
18fe0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
18ff0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
19000 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
19010 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
19020 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
19030 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
19040 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
19050 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
19060 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
19070 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
19080 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
19090 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
190a0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
190b0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
190c0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
190d0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
190e0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
190f0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
19100 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
19110 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
19120 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
19130 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
19140 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
19150 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
19160 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
19170 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
19180 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
19190 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
191a0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
191b0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
191c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
191d0 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
191e0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
191f0 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
19200 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19210 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
19220 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
19230 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
19240 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
19250 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
19260 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19270 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
19280 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19290 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
192a0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
192b0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
192c0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
192d0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
192e0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
192f0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
19300 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
19310 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
19320 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
19330 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
19340 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
19350 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
19360 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
19370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
19380 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
19390 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
193a0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
193b0 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
193c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
193d0 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
193e0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
193f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
19400 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
19410 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
19420 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
19430 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
19440 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
19450 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
19460 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19470 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
19480 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
19490 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71  Db))!=0 );..  sq
194a0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
194b0 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
194c0 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
194d0 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
194e0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
194f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19500 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
19510 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19520 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
19530 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19540 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
19550 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
19560 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
19570 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
19580 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
19590 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
195a0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
195b0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
195c0 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
195d0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
195e0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
195f0 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
19600 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
19610 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
19620 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19630 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
19640 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
19650 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
19660 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19670 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
19680 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
19690 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
196a0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
196b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
196c0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
196d0 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
196e0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
196f0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
19700 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19710 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19720 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19730 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19740 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
19750 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
19760 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
19770 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
19780 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
19790 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
197a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
197b0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
197c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
197d0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
197e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
197f0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
19800 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
19810 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
19820 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
19830 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
19840 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
19850 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
19860 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
19870 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
19880 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
19890 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
198a0 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
198b0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
198c0 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
198d0 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
198e0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
198f0 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
19900 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
19910 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
19920 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
19930 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
19940 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
19950 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
19960 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
19970 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
19980 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
19990 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
199a0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
199b0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
199c0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
199d0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
199e0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
199f0 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
19a00 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
19a10 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
19a20 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
19a30 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
19a40 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
19a50 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
19a60 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
19a70 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
19a80 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
19a90 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
19aa0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
19ab0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
19ac0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19ad0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
19ae0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19af0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19b00 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19b10 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
19b20 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
19b30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
19b40 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
19b50 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
19b60 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
19b70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19b80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
19b90 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
19ba0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
19bb0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
19bc0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
19bd0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
19be0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
19bf0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
19c00 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
19c10 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
19c20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
19c30 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
19c40 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
19c50 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
19c60 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
19c70 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
19c80 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
19c90 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19ca0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19cb0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19cc0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19cd0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19ce0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19cf0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19d00 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19d10 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
19d20 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
19d30 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
19d40 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
19d50 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
19d60 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
19d70 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
19d80 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
19d90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
19da0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
19db0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
19dc0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
19dd0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
19de0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
19df0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19e00 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
19e10 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
19e20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
19e30 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
19e40 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
19e50 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
19e60 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
19e70 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
19e80 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
19e90 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
19ea0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
19eb0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
19ec0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
19ed0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
19ee0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
19ef0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
19f00 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
19f10 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
19f20 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
19f30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
19f40 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
19f50 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
19f60 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
19f70 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
19f80 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
19f90 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
19fa0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
19fb0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
19fc0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
19fd0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
19fe0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
19ff0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1a000 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1a010 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1a020 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1a030 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1a040 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1a050 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1a060 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1a070 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1a080 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1a090 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
1a0a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1a0b0 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
1a0c0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1a0d0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1a0e0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1a0f0 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1a100 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
1a110 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1a120 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
1a130 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69  age is P2.  Or i
1a140 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20  f P5!=0 use the 
1a150 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1a160 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74  ter P2 to find t
1a170 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e  he.** root page.
1a180 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1a190 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1a1a0 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1a1b0 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1a1c0 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1a1d0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1a1e0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1a1f0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1a200 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1a210 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
1a220 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
1a230 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1a240 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1a250 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1a260 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
1a270 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
1a280 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1a290 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1a2a0 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
1a2b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1a2c0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1a2d0 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a  ble, or to the.*
1a2e0 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20  * largest index 
1a2f0 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66  of any column of
1a300 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
1a310 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  is actually used
1a320 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
1a330 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a  truction works j
1a340 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  ust like OpenRea
1a350 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1a360 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
1a370 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
1a380 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20  te mode.  For a 
1a390 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65  given table, the
1a3a0 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72  re can be one or
1a3b0 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a   more read-only.
1a3c0 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20  ** cursors or a 
1a3d0 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74  single read/writ
1a3e0 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74  e cursor but not
1a3f0 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   both..**.** See
1a400 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a   also OpenRead..
1a410 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1a420 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1a430 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20  nWrite: {.  int 
1a440 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1a450 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1a460 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1a470 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1a480 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1a490 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1a4a0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1a4b0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
1a4c0 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
1a4d0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1a4e0 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61  ==pOp->p5 );.  a
1a4f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1a500 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1a510 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   || pOp->p5==0 )
1a520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1a530 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1a540 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1a550 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1a560 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1a570 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1a580 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1a590 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
1a5a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
1a5b0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1a5c0 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1a5d0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1a5e0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1a5f0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1a600 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1a610 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
1a620 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
1a630 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
1a640 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
1a650 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
1a660 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
1a670 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
1a680 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1a690 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1a6a0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
1a6b0 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
1a6c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1a6d0 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1a6e0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1a6f0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1a700 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1a710 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1a720 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1a730 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1a740 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1a750 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1a760 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1a770 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1a780 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1a790 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1a7a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1a7b0 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1a7c0 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
1a7d0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1a7e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1a7f0 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
1a800 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
1a810 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1a820 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
1a830 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
1a840 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1a850 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
1a860 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
1a870 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
1a880 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
1a890 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
1a8a0 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
1a8b0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
1a8c0 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
1a8d0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1a8e0 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
1a8f0 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
1a900 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
1a910 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
1a920 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
1a930 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
1a940 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
1a950 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
1a960 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
1a970 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1a980 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
1a990 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
1a9a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1a9b0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1a9c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a9d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a9e0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1a9f0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1aa00 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1aa10 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1aa20 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1aa30 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1aa40 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1aa50 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1aa60 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1aa70 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1aa80 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1aa90 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1aaa0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1aab0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1aac0 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1aad0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1aae0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1aaf0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ab00 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1ab10 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1ab20 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1ab30 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1ab40 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1ab50 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1ab60 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1ab70 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1ab80 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1ab90 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1aba0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1abb0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1abc0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1abd0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  dered = 1;.  rc 
1abe0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1abf0 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
1ac00 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
1ac10 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
1ac20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1ac30 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  = pKeyInfo;.  as
1ac40 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1ac50 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1ac60 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65  LOAD );.  sqlite
1ac70 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1ac80 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1ac90 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1aca0 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20  AG_BULKCSR));.. 
1acb0 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
1acc0 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
1acd0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
1ace0 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
1acf0 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
1ad00 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1ad10 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
1ad20 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
1ad30 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1ad40 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
1ad50 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1ad60 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1ad70 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1ad80 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1ad90 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1ada0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1adb0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1adc0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1add0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1ade0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1adf0 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1ae00 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1ae10 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1ae20 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1ae30 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1ae40 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1ae50 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1ae60 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1ae70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ae80 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1ae90 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1aea0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1aeb0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1aec0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1aed0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1aee0 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1aef0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1af00 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1af10 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1af20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1af30 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1af40 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1af50 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1af60 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1af70 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1af80 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1af90 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1afa0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1afb0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1afc0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1afd0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1afe0 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1aff0 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1b000 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1b010 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1b020 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1b030 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1b040 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b050 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1b060 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1b070 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1b080 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1b090 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1b0a0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1b0b0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1b0c0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1b0d0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1b0e0 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1b0f0 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1b100 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1b110 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1b120 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1b130 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1b140 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1b150 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1b160 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1b170 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1b180 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1b190 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1b1a0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1b1b0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1b1c0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1b1d0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1b1e0 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1b1f0 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1b200 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1b210 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1b220 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1b230 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1b240 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1b250 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1b260 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1b270 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1b280 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1b290 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1b2a0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1b2b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b2c0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b2d0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1b2e0 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1b2f0 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1b300 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1b310 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b320 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1b330 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b340 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1b350 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1b360 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1b370 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b380 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1b390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b3a0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1b3b0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1b3c0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1b3d0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1b3e0 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1b3f0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1b400 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b410 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1b420 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
1b430 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20  meral = 1;.  rc 
1b440 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1b450 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1b460 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1b490 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1b4a0 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1b4b0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1b4c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b4d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1b4e0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b4f0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1b500 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1b510 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1b520 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1b530 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1b540 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1b550 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1b560 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b570 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1b580 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1b590 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1b5a0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1b5b0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1b5c0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1b5d0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1b5e0 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1b5f0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1b600 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1b610 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1b620 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1b630 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1b640 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b650 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1b660 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1b670 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1b680 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b690 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1b6a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b6b0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1b6c0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1b6d0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1b6e0 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1b6f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b700 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1b710 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1b720 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1b730 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b740 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b750 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b760 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b770 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1b780 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1b790 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1b7a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b7b0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b7c0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1b7d0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1b7e0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1b7f0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b800 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1b810 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1b820 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b830 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1b840 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1b850 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1b860 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b870 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1b880 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1b890 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1b8a0 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1b8b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b8c0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1b8d0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1b8e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1b8f0 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1b900 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1b910 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1b920 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1b930 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1b940 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1b950 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1b960 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1b970 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1b980 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1b990 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  hm..*/.case OP_S
1b9a0 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1b9b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1b9c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b9d0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1b9e0 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1b9f0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1ba00 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1ba10 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1ba20 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   1);.  if( pCx==
1ba30 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1ba40 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1ba50 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1ba60 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1ba70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1ba80 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1ba90 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1baa0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1bab0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1bac0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1bad0 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1bae0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1baf0 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1bb00 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1bb10 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1bb20 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1bb30 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1bb40 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1bb50 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1bb60 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1bb70 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1bb80 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1bb90 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1bba0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1bbb0 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1bbc0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1bbd0 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1bbe0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1bbf0 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1bc00 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1bc10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1bc20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1bc30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1bc40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1bc50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1bc60 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20  C->pSorter );.  
1bc70 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1bc80 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  t++)==0 ){.    p
1bc90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1bca0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1bcb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1bcc0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1bcd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1bce0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1bcf0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1bd00 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1bd10 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1bd20 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1bd30 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1bd40 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1bd50 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1bd60 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1bd70 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1bd80 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1bd90 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1bda0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1bdb0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1bdc0 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1bdd0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1bde0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1bdf0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1be00 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1be10 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1be20 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1be30 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1be40 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1be50 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1be60 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1be70 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1be80 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1be90 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1bea0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1beb0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1bec0 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1bed0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1bee0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1bef0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1bf00 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1bf10 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1bf20 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1bf30 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1bf40 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1bf50 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1bf60 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1bf70 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1bf80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1bf90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bfa0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1bfb0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1bfc0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1bfd0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1bfe0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1bff0 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c000 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c010 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c020 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c030 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c040 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c050 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c060 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c070 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c080 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c090 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c0a0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c0b0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c0c0 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c0d0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c0e0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c0f0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c100 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c110 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c120 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c130 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c140 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c150 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c160 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c170 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c180 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c190 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c1a0 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31  pcode: SeekGe P1
1c1b0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c1c0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c1d0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c1e0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c1f0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c200 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c210 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c220 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c230 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c240 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1c250 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c260 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c270 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c280 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c290 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c2a0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c2b0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c2c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c2d0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c2e0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c2f0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c300 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1c310 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c320 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1c330 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1c340 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c350 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c360 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1c370 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1c380 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1c390 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c3a0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c3b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c3c0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1c3d0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1c3e0 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1c3f0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1c400 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
1c410 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1c420 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1c430 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1c440 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1c450 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1c460 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1c470 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1c480 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1c490 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1c4a0 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1c4b0 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1c4c0 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1c4d0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1c4e0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1c4f0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1c500 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1c510 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1c520 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1c530 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1c540 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1c550 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1c560 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1c570 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1c580 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1c590 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1c5a0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1c5b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1c5c0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1c5d0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1c5e0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1c5f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1c600 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1c610 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1c620 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1c630 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c640 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
1c650 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1c660 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c670 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c680 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c690 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c6a0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c6b0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c6c0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1c6d0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1c6e0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1c6f0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1c700 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1c710 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1c720 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1c730 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1c740 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c750 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c760 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c770 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c780 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1c790 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c7a0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1c7b0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1c7c0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1c7d0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1c7e0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1c7f0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1c800 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1c810 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1c820 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1c830 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1c840 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1c850 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1c860 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1c870 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20  code: SeekLe P1 
1c880 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1c890 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1c8a0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1c8b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1c8c0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1c8d0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1c8e0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1c8f0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1c900 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1c910 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1c920 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1c930 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1c940 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1c950 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1c960 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1c970 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1c980 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1c990 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1c9a0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1c9b0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1c9c0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1c9d0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1c9e0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c9f0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1ca00 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1ca10 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1ca20 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1ca30 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1ca40 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1ca50 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1ca60 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1ca70 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1ca80 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ca90 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1caa0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1cab0 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1cac0 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1cad0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cae0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1caf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1cb00 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1cb10 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1cb20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cb30 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1cb40 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1cb50 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1cb60 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1cb70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1cb80 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1cb90 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1cba0 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1cbb0 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1cbc0 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1cbd0 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1cbe0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1cbf0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1cc00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1cc10 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1cc20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1cc30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1cc40 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1cc50 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1cc60 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1cc70 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
1cc80 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
1cc90 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1cca0 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
1ccb0 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
1ccc0 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
1ccd0 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
1cce0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1ccf0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
1cd00 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1cd10 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d  0 );.  oc = pOp-
1cd20 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e  >opcode;.  pC->n
1cd30 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66  ullRow = 0;.  if
1cd40 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1cd50 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1cd60 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1cd70 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1cd80 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1cd90 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1cda0 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1cdb0 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1cdc0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1cdd0 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1cde0 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1cdf0 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
1ce00 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
1ce10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1ce20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1ce30 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1ce40 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1ce50 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1ce60 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  3);.    pC->rowi
1ce70 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1ce80 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1ce90 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1cea0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1ceb0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1cec0 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1ced0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1cee0 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1cef0 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1cf00 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1cf10 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1cf20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1cf30 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1cf40 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1cf50 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1cf60 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1cf70 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1cf80 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1cf90 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1cfa0 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1cfb0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1cfc0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1cfd0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1cfe0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1cff0 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p2 - 1;  VdbeBr
1d000 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1d010 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d020 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1d030 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1d040 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1d050 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1d060 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1d070 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1d080 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1d090 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1d0a0 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1d0b0 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1d0c0 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1d0d0 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1d0e0 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1d0f0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1d100 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1d110 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1d120 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1d130 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1d140 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1d150 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1d160 66 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62  f( pIn3->r<(doub
1d170 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1d180 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1d190 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1d1a0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1d1b0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1d1c0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1d1d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1d1e0 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1d1f0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1d200 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1d210 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1d220 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1d230 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1d240 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1d250 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1d260 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1d270 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1d280 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1d290 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1d2a0 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1d2b0 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1d2c0 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1d2d0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1d2e0 70 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29  pIn3->r>(double)
1d2f0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1d300 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1d310 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1d320 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d330 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1d340 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1d350 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d360 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1d370 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1d380 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1d390 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1d3a0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1d3b0 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1d3c0 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1d3d0 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1d3e0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1d3f0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1d400 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1d410 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1d420 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d430 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1d440 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1d450 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1d460 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1d470 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d480 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
1d490 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1d4a0 69 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  iKey;.    }.  }e
1d4b0 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  lse{.    nField 
1d4c0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1d4d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1d4e0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1d4f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1d500 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1d510 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1d520 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1d530 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1d540 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1d550 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1d560 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1d570 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1d580 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1d590 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1d5a0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1d5b0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1d5c0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1d5d0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1d5e0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1d5f0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1d600 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1d610 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1d620 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1d630 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1d640 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1d650 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d660 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1d670 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1d680 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d690 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1d6a0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1d6b0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d6c0 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1d6d0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1d6e0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1d6f0 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1d700 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1d710 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1d720 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1d730 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d740 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1d750 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1d760 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1d770 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1d780 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1d790 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1d7a0 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20  r.aMem);.    rc 
1d7b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d7c0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d7d0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1d7e0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1d7f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d800 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1d810 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d820 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  r;.    }.    pC-
1d830 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d840 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66  0;.  }.  pC->def
1d850 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d860 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1d870 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1d880 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d890 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1d8a0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1d8b0 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
1d8c0 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
1d8d0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1d8e0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
1d8f0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
1d900 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1d910 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1d920 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1d930 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1d940 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1d950 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d960 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1d970 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d980 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d990 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1d9a0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d9b0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d9c0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1d9d0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1d9e0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1d9f0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1da00 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1da10 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1da20 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1da30 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1da40 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1da50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1da60 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1da70 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1da80 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1da90 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1daa0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1dab0 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1dac0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1dad0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
1dae0 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1daf0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1db00 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1db10 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1db20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1db30 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1db40 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
1db50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1db60 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1db70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1db80 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
1db90 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1dba0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1dbb0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
1dbc0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1dbd0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1dbe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1dbf0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1dc00 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65  Synopsis:  intke
1dc10 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P2].**.** P1
1dc20 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1dc30 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1dc40 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1dc50 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1dc60 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1dc70 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1dc80 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1dc90 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1dca0 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1dcb0 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1dcc0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1dcd0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1dce0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1dcf0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1dd00 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1dd10 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1dd20 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1dd30 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1dd40 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1dd50 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1dd60 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1dd70 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1dd80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dd90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1dda0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1ddb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ddc0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ddd0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1dde0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1ddf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1de00 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d  isTable );.  pC-
1de10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1de20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1de30 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ->p2];.  pC->mov
1de40 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1de50 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1de60 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  pIn2);.  pC->row
1de70 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1de80 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1de90 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  eto = 1;.  break
1dea0 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1deb0 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1dec0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1ded0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1dee0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1def0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1df00 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1df10 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1df20 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1df30 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1df40 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1df50 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1df60 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1df70 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1df80 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1df90 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1dfa0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1dfb0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1dfc0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1dfd0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1dfe0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1dff0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1e000 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1e010 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1e020 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1e030 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1e040 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1e050 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1e060 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
1e070 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
1e080 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1e090 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1e0a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e0b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1e0c0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1e0d0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1e0e0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1e0f0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1e100 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1e110 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1e120 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1e130 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1e140 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1e150 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1e160 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1e170 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1e180 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1e190 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1e1a0 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1e1b0 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1e1c0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1e1d0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1e1e0 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1e1f0 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1e200 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1e210 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1e220 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1e230 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1e240 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1e250 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1e260 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1e270 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1e280 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1e290 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53  g entry..**.** S
1e2a0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1e2b0 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
1e2c0 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
1e2d0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
1e2e0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e2f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e300 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e310 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1e320 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1e330 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1e340 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1e350 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1e360 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1e370 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1e380 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1e390 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1e3a0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1e3b0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e3c0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e3d0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e3e0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e3f0 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
1e400 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
1e410 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1e420 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1e430 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
1e440 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
1e450 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
1e460 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
1e470 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
1e480 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
1e490 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
1e4a0 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
1e4b0 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
1e4c0 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
1e4d0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
1e4e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1e4f0 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
1e500 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
1e510 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
1e520 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
1e530 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
1e540 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
1e550 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
1e560 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
1e570 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
1e580 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
1e590 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
1e5a0 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
1e5b0 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
1e5c0 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
1e5d0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
1e5e0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e5f0 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
1e600 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
1e610 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
1e620 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e630 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
1e640 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
1e650 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1e660 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
1e670 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e680 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
1e690 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  sts;.  int ii;. 
1e6a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e6b0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
1e6c0 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
1e6d0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1e6e0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1e6f0 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1e700 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1e710 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1e720 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1e730 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
1e740 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1e750 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
1e760 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
1e770 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
1e780 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
1e790 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
1e7a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e7b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e7c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e7d0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1e7e0 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1e7f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e800 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e810 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
1e820 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1e830 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1e840 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1e850 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1e860 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
1e870 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
1e880 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
1e890 75 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c  uppress a compil
1e8a0 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
1e8b0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1e8c0 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
1e8d0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1e8e0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1e8f0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1e900 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
1e910 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  In3;.    for(ii=
1e920 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
1e930 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
1e940 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e950 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
1e960 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1e970 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23  (&r.aMem[ii]);.#
1e980 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e990 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  UG.      if( ii 
1e9a0 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
1e9b0 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
1e9c0 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69  aMem[ii]);.#endi
1e9d0 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78  f.    }.    pIdx
1e9e0 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73  Key = &r;.  }els
1e9f0 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  e{.    pIdxKey =
1ea00 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
1ea10 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
1ea20 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65  .        pC->pKe
1ea30 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c  yInfo, aTempRec,
1ea40 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1ea50 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b  ), &pFree.    );
1ea60 20 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65   .    if( pIdxKe
1ea70 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
1ea80 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
1ea90 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1eaa0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73  M_Blob );.    as
1eab0 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1eac0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d  gs & MEM_Zero)==
1ead0 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f  0 );  /* zeroblo
1eae0 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e  bs already expan
1eaf0 64 65 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ded */.    sqlit
1eb00 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1eb10 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1eb20 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1eb30 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d  z, pIdxKey);.  }
1eb40 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61  .  pIdxKey->defa
1eb50 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66  ult_rc = 0;.  if
1eb60 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1eb70 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a  P_NoConflict ){.
1eb80 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f      /* For the O
1eb90 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63  P_NoConflict opc
1eba0 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ode, take the ju
1ebb0 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  mp if any of the
1ebc0 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69  .    ** input fi
1ebd0 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73  elds are NULL, s
1ebe0 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74  ince any key wit
1ebf0 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f  h a NULL will no
1ec00 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63  t.    ** conflic
1ec10 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d  t */.    for(ii=
1ec20 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
1ec30 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  ii++){.      if(
1ec40 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67   r.aMem[ii].flag
1ec50 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1ec60 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1ec70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72  ->p2 - 1; VdbeBr
1ec80 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1ec90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1eca0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1ecb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ecc0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1ecd0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1ece0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1ecf0 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  res);.  if( pOp-
1ed00 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1ed10 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1ed20 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20  , pFree);.  }.  
1ed30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ed40 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
1ed50 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
1ed60 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
1ed70 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1ed80 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
1ed90 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
1eda0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
1edb0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1edc0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1edd0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ede0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
1edf0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1ee00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
1ee10 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1ee20 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
1ee30 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
1ee40 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1ee50 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
1ee60 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1ee70 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1ee80 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
1ee90 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1eea0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1eeb0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1eec0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1eed0 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1eee0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1eef0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
1ef00 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1ef10 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
1ef20 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
1ef30 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
1ef40 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
1ef50 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
1ef60 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
1ef70 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
1ef80 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
1ef90 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
1efa0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1efb0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1efc0 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
1efd0 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68  a record.** with
1efe0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c   rowid P3 then l
1eff0 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
1f000 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
1f010 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
1f020 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74  .** through to t
1f030 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1f040 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
1f050 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
1f060 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
1f070 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
1f080 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
1f090 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
1f0a0 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
1f0b0 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  s)..**.** See al
1f0c0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1f0d0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
1f0e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1f0f0 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1f100 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1f110 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f120 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1f130 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1f140 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
1f150 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1f160 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1f170 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1f180 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1f190 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f1a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f1b0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1f1c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f1d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f1e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f1f0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
1f200 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1f210 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1f220 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1f230 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
1f240 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
1f250 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
1f260 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
1f270 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f280 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1f290 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1f2a0 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73  &res);.  pC->las
1f2b0 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1f2c0 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  .i;.  pC->rowidI
1f2d0 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1f2e0 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ?1:0;.  pC->null
1f2f0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
1f300 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1f310 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
1f320 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1f330 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
1f340 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
1f350 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
1f360 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1f370 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1f380 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1f390 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  lid==0 );.  }.  
1f3a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1f3b0 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   res;.  break;.}
1f3c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1f3d0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1f3e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
1f3f0 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
1f400 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
1f410 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1f420 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1f430 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1f440 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1f450 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f460 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1f470 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1f480 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1f490 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1f4a0 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1f4b0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1f4c0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1f4d0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1f4e0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1f4f0 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
1f500 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f510 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f520 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1f530 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
1f540 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  p1]!=0 );.  pOut
1f550 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
1f560 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
1f570 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
1f580 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1f590 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1f5a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1f5b0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
1f5c0 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
1f5d0 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
1f5e0 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
1f5f0 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
1f600 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
1f610 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
1f620 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
1f630 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
1f640 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
1f650 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
1f660 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
1f670 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
1f680 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1f690 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
1f6a0 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
1f6b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
1f6c0 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
1f6d0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
1f6e0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
1f6f0 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
1f700 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
1f710 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
1f720 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1f730 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
1f740 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
1f750 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
1f760 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
1f770 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
1f780 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
1f790 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
1f7a0 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
1f7b0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
1f7c0 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
1f7d0 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
1f7e0 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
1f7f0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
1f800 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
1f810 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
1f820 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
1f830 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
1f840 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
1f850 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
1f860 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1f870 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
1f880 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ase */.  i64 v; 
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
1f8b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1f8c0 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
1f8d0 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
1f8e0 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
1f8f0 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
1f900 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1f910 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
1f920 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1f930 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
1f940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f950 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
1f960 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
1f970 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
1f980 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
1f990 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f9a0 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
1f9b0 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
1f9c0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
1f9d0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
1f9e0 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
1f9f0 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
1fa00 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
1fa10 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1fa20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1fa30 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1fa40 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1fa50 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1fa60 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1fa70 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e    if( NEVER(pC->
1fa80 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20  pCursor==0) ){. 
1fa90 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69     /* The zero i
1faa0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62  nitialization ab
1fab0 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20  ove is all that 
1fac0 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d  is needed */.  }
1fad0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65  else{.    /* The
1fae0 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
1faf0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
1fb00 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
1fb10 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
1fb20 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
1fb30 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
1fb40 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
1fb50 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
1fb60 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
1fb70 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
1fb80 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1fb90 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
1fba0 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
1fbb0 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
1fbc0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
1fbd0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
1fbe0 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
1fbf0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
1fc00 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
1fc10 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
1fc20 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
1fc30 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
1fc40 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
1fc50 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
1fc60 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
1fc70 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
1fc80 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
1fc90 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
1fca0 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
1fcb0 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
1fcc0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
1fcd0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
1fce0 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
1fcf0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
1fd00 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
1fd10 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
1fd20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
1fd30 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
1fd40 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
1fd50 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1fd60 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
1fd70 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1fd80 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1fd90 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1fda0 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1fdb0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1fdc0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1fdd0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1fde0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1fdf0 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1fe00 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1fe10 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1fe20 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1fe30 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1fe40 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1fe50 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1fe60 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1fe70 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1fe80 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1fe90 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1fea0 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1feb0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1fec0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1fed0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1fee0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1fef0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1ff00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ff10 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1ff20 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1ff30 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1ff40 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1ff50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ff60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1ff70 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  }.      if( res 
1ff80 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31  ){.        v = 1
1ff90 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31  ;   /* IMP: R-61
1ffa0 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20  914-48074 */.   
1ffb0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ffc0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1ffd0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
1ffe0 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  lid(pC->pCursor)
1fff0 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
20000 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
20010 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
20020 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61  , &v);.        a
20030 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
20040 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e  E_OK );   /* Can
20050 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69  not fail followi
20060 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a  ng BtreeLast() *
20070 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  /.        if( v>
20080 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
20090 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
200a0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
200b0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
200c0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
200d0 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
200e0 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
200f0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
20100 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
20110 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
20120 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
20130 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
20140 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20150 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20160 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
20180 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
20190 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
201a0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
201b0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
201c0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
201d0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
201e0 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
201f0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20200 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20210 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
20220 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20230 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
20240 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
20250 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
20260 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
20270 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
20280 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20290 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
202a0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
202b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
202c0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
202d0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
202e0 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
202f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
20300 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
20310 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
20320 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
20330 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
20340 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
20350 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
20360 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
20370 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
20380 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
20390 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
203a0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
203b0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
203c0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
203d0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
203e0 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
203f0 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
20400 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
20410 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
20420 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
20430 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32  ;   /* IMP: R-12
20440 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20  275-61338 */.   
20450 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20460 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20470 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
20480 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
20490 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
204a0 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
204b0 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
204c0 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
204d0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
204e0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
204f0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
20500 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
20510 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
20520 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
20530 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
20540 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
20550 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
20560 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
20570 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
20580 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
20590 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
205a0 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
205b0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
205c0 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
205d0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
205e0 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
205f0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
20600 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
20610 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20620 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
20630 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
20640 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
20650 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
20680 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
20690 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
206a0 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
206b0 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
206c0 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
206d0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
206e0 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20   lastRowid;.    
206f0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
20700 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
20710 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
20720 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b  tive */.      v+
20730 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20740 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63  -zero */.      c
20750 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68  nt = 0;.      wh
20760 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71  ile(   ((rc = sq
20770 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20780 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
20790 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
207a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207d0 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
207e0 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
207f0 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
20800 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
20810 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20  ++cnt<100)){.   
20820 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f       /* collisio
20830 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20  n - try another 
20840 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a  random rowid */.
20850 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20860 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
20870 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
20880 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a     if( cnt<5 ){.
20890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79            /* try
208a0 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20   "small" random 
208b0 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69  rowids for the i
208c0 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20  nitial attempts 
208d0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26  */.          v &
208e0 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
208f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20900 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
20910 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73  OWID>>1); /* ens
20920 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e  ure doesn't go n
20930 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20  egative */.     
20940 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b     }.        v++
20950 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
20960 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  zero */.      }.
20970 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
20980 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
20990 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
209a0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
209b0 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
209c0 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
209d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
209e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
209f0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20a00 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
20a10 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
20a20 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72  .    }.    pC->r
20a30 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
20a40 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
20a50 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
20a60 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20a70 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20a80 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
20a90 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
20aa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
20ab0 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
20ac0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
20ad0 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
20ae0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
20af0 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
20b00 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
20b10 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
20b20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
20b30 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
20b40 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
20b50 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
20b60 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
20b70 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
20b80 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
20b90 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
20ba0 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
20bb0 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
20bc0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
20bd0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
20be0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
20bf0 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
20c00 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
20c10 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
20c20 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
20c30 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
20c40 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
20c50 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
20c60 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
20c70 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
20c80 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
20c90 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
20ca0 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
20cb0 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
20cc0 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
20cd0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
20ce0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
20cf0 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
20d00 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
20d10 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
20d20 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
20d30 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
20d40 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
20d50 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
20d60 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
20d70 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
20d80 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
20d90 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
20da0 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
20db0 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
20dc0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
20dd0 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
20de0 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
20df0 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
20e00 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
20e10 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
20e20 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
20e30 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
20e40 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
20e50 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
20e60 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
20e70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
20e80 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
20e90 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
20ea0 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
20eb0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
20ec0 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
20ed0 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
20ee0 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
20ef0 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
20f00 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
20f10 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
20f20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
20f30 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
20f40 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
20f50 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
20f60 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
20f70 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
20f80 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
20f90 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
20fa0 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
20fb0 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
20fc0 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
20fd0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
20fe0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
20ff0 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
21000 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
21010 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
21020 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
21030 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
21040 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
21050 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
21060 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
21070 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
21080 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
21090 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
210a0 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
210b0 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
210c0 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
210d0 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
210e0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
210f0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
21100 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
21110 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
21120 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
21130 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
21140 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
21150 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
21160 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
21170 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
21180 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
21190 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
211a0 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
211b0 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
211c0 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
211d0 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
211e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
211f0 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
21200 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
21210 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
21220 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
21230 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
21240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
21250 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
21260 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
21270 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
21280 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
21290 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
212a0 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
212b0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
212c0 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
212d0 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
212e0 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
212f0 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
21300 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
21310 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
21320 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
21330 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
21340 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
21350 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
21360 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
21370 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21380 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
21390 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
213a0 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
213b0 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
213c0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
213d0 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
213e0 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
213f0 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
21400 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
21410 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
21420 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
21430 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
21440 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
21450 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
21460 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
21470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21480 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
21490 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
214a0 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
214b0 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
214c0 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
214d0 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
214e0 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
214f0 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
21500 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
21510 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
21520 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
21530 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
21540 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
21550 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
21560 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
21570 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
21580 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
21590 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
215a0 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
215b0 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
215c0 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
215d0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
215e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
215f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21600 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
21610 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
21620 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21630 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21640 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21650 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
21660 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
21670 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
21680 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
21690 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
216a0 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ble );.  REGISTE
216b0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
216c0 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
216d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
216e0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
216f0 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
21700 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
21710 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
21720 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
21730 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
21740 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
21750 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
21760 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
21770 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
21780 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
21790 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
217a0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
217b0 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
217c0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
217d0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
217e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
217f0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
21800 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
21810 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20  LAG_LASTROWID ) 
21820 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
21830 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
21840 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
21850 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
21860 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
21870 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
21880 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
21890 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
218a0 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
218b0 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
218c0 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
218d0 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
218e0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
218f0 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
21900 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
21910 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
21920 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
21930 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
21940 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
21950 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
21960 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
21970 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
21980 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
21990 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
219a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219b0 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
219c0 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219e0 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
219f0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d  OPFLAG_APPEND)!=
21a00 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  0, seekResult.  
21a10 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  );.  pC->rowidIs
21a20 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
21a30 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21a40 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21a50 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21a60 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
21a70 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
21a80 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
21a90 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
21aa0 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
21ab0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
21ac0 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
21ad0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
21ae0 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
21af0 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e      zTbl = pOp->
21b00 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28  p4.z;.    op = (
21b10 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
21b20 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
21b30 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
21b40 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
21b50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21b60 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
21b70 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
21b80 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
21b90 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
21ba0 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
21bb0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
21bc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21bd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
21be0 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
21bf0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
21c00 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
21c10 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
21c20 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
21c30 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
21c40 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
21c50 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
21c60 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
21c70 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
21c80 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
21c90 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
21ca0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21cb0 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
21cc0 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
21cd0 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
21ce0 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
21cf0 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
21d00 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
21d10 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
21d20 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
21d30 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
21d40 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
21d50 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
21d60 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
21d70 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
21d80 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
21d90 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
21da0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
21db0 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
21dc0 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
21dd0 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
21de0 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
21df0 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
21e00 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
21e10 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
21e20 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21e30 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
21e40 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
21e50 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
21e60 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
21e70 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
21e80 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
21e90 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
21ea0 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
21eb0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
21ec0 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
21ed0 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
21ee0 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
21ef0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
21f00 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65  ete: {.  i64 iKe
21f10 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  y;.  VdbeCursor 
21f20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
21f30 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21f40 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21f50 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21f60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21f70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21f80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
21f90 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
21fa0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
21fb0 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
21fc0 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
21fd0 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
21fe0 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20  tRowid;      /* 
21ff0 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68  Only used for th
22000 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
22010 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
22020 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
22030 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
22040 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
22050 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
22060 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
22070 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
22080 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
22090 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
220a0 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
220b0 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
220c0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
220d0 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
220e0 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
220f0 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
22100 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
22110 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
22120 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
22130 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
22140 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
22150 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
22160 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
22170 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
22180 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
22190 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
221a0 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
221b0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
221c0 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
221d0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
221e0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
221f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
22200 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
22210 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
22220 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
22230 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22240 65 72 72 6f 72 3b 0a 0a 20 20 72 63 20 3d 20 73  error;..  rc = s
22250 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
22260 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  e(pC->pCursor);.
22270 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22280 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22290 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
222a0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
222b0 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
222c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
222d0 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
222e0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
222f0 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54  >p4.z && pC->isT
22300 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e  able ){.    db->
22310 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22320 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22330 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20  SQLITE_DELETE,. 
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22350 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70         db->aDb[p
22360 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70  C->iDb].zName, p
22370 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b  Op->p4.z, iKey);
22380 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22390 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
223a0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
223b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
223c0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
223d0 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
223e0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
223f0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
22400 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
22410 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
22420 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
22430 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
22440 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
22450 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
22460 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
22470 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
22480 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
22490 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
224a0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
224b0 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
224c0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
224d0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
224e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
224f0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
22500 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
22510 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
22520 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
22530 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
22540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22550 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
22560 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
22570 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
22580 72 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  rtrim(r[P3],P4) 
22590 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
225a0 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
225b0 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
225c0 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
225d0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
225e0 2a 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c 6f  * the record blo
225f0 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
22600 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
22610 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
22620 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
22630 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
22640 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
22650 54 68 65 20 66 69 6e 61 6c 20 50 34 20 66 69 65  The final P4 fie
22660 6c 64 73 20 6f 66 20 62 6f 74 68 0a 2a 2a 20 74  lds of both.** t
22670 68 65 20 50 33 20 61 6e 64 20 73 6f 72 74 65 72  he P3 and sorter
22680 20 72 65 63 6f 72 64 20 61 72 65 20 69 67 6e 6f   record are igno
22690 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  red..**.** If ei
226a0 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73  ther P3 or the s
226b0 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  orter contains a
226c0 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20   NULL in one of 
226d0 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e  their significan
226e0 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74  t.** fields (not
226f0 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34   counting the P4
22700 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
22710 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e  nd which are ign
22720 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68  ored) then.** th
22730 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
22740 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71  assumed to be eq
22750 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20  ual..**.** Fall 
22760 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20  through to next 
22770 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74  instruction if t
22780 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63  he two records c
22790 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a  ompare equal to.
227a0 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  ** each other.  
227b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
227c0 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ey are different
227d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
227e0 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
227f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22800 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
22810 20 6e 49 67 6e 6f 72 65 3b 0a 0a 20 20 70 43 20   nIgnore;..  pC 
22820 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22830 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
22840 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
22850 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
22860 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
22870 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
22880 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67  [pOp->p3];.  nIg
22890 6e 6f 72 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  nore = pOp->p4.i
228a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
228b0 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
228c0 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e  e(pC, pIn3, nIgn
228d0 6f 72 65 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  ore, &res);.  Vd
228e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
228f0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
22900 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
22910 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
22920 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70  break;.};../* Op
22930 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61  code: SorterData
22940 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22950 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22960 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
22970 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
22980 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
22990 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
229a0 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
229b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
229c0 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
229d0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
229e0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
229f0 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
22a00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22a10 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
22a20 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
22a30 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
22a40 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
22a50 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
22a60 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
22a70 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
22a80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22a90 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
22aa0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
22ab0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
22ac0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
22ad0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
22ae0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
22af0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
22b00 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
22b10 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
22b20 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
22b30 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
22b40 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
22b50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
22b60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
22b70 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
22b80 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
22b90 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
22ba0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
22bb0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22bc0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22bd0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
22be0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
22bf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
22c00 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
22c10 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
22c20 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
22c30 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
22c40 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
22c50 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
22c60 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
22c70 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
22c80 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
22c90 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
22ca0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
22cb0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
22cc0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
22cd0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22ce0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
22cf0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
22d00 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
22d10 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
22d20 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
22d30 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
22d40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
22d50 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
22d60 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
22d70 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22d80 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
22d90 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
22da0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
22db0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
22dc0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
22dd0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
22de0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
22df0 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
22e00 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
22e10 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
22e20 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
22e30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22e40 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
22e50 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
22e60 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22e70 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
22e80 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
22e90 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
22ea0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
22eb0 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
22ec0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22ed0 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
22ee0 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
22ef0 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
22f00 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22f10 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
22f20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22f30 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
22f40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22f50 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
22f60 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22f70 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
22f80 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
22f90 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
22fa0 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  rsr) );..  /* Th
22fb0 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
22fc0 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
22fd0 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
22fe0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
22ff0 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
23000 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
23010 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
23020 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
23030 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
23040 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
23050 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f   Hence the follo
23060 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  wing sqlite3Vdbe
23070 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
23080 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20  all is always.  
23090 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ** a no-op and c
230a0 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20  an never fail.  
230b0 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20  But we leave it 
230c0 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61  in place as a sa
230d0 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fety..  */.  ass
230e0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
230f0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
23100 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
23110 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
23120 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
23130 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
23140 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23150 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70  _error;..  if( p
23160 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
23170 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
23180 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
23190 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
231a0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
231b0 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
231c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
231d0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
231e0 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
231f0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
23200 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
23210 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
23220 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
23230 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
23240 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
23250 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
23260 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
23270 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
23280 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
23290 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
232a0 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
232b0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
232c0 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
232d0 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
232e0 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
232f0 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
23300 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
23310 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
23320 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
23330 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
23340 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
23350 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
23360 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
23370 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
23380 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
23390 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
233a0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
233b0 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
233c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
233d0 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
233e0 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
233f0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
23400 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
23410 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
23420 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
23430 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
23440 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
23450 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
23460 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
23470 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
23480 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
23490 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
234a0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
234b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
234c0 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
234d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
234e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
234f0 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
23500 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
23510 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
23520 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
23530 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
23540 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
23550 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
23560 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
23570 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
23580 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
23590 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
235a0 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
235b0 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
235c0 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
235d0 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
235e0 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
235f0 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
23600 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
23610 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
23620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
23630 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
23640 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
23650 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
23660 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
23670 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
23680 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
23690 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
236a0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
236b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
236c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
236d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
236e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
236f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23700 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23710 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
23720 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d  bleReg==0 || pC-
23730 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
23740 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
23750 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
23760 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
23770 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
23780 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
23790 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
237a0 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
237b0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
237c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
237d0 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
237e0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
237f0 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20   ){.    pVtab = 
23800 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  pC->pVtabCursor-
23810 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
23820 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
23830 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
23840 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
23850 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
23860 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
23870 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
23880 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
23890 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
238a0 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69  p, pVtab);.#endi
238b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
238c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
238d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
238e0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
238f0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
23900 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23910 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23920 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
23930 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23940 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
23950 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a  rowidIsValid ){.
23960 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61        v = pC->la
23970 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c  stRowid;.    }el
23980 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
23990 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
239a0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
239b0 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  &v);.      asser
239c0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
239d0 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
239e0 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
239f0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76  sorMoveto() abov
23a00 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e */.    }.  }. 
23a10 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
23a20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23a30 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
23a40 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
23a50 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
23a60 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
23a70 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
23a80 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
23a90 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
23aa0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
23ab0 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
23ac0 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
23ad0 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
23ae0 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
23af0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23b00 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
23b10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23b20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23b30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23b40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23b50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23b60 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
23b70 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
23b80 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
23b90 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23ba0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23bb0 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
23bc0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
23bd0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
23be0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
23bf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23c00 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
23c10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
23c20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
23c30 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
23c40 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
23c50 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
23c60 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
23c70 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
23c80 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
23c90 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
23ca0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
23cb0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
23cc0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
23cd0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
23ce0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
23cf0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
23d00 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
23d10 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
23d20 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
23d30 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
23d40 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
23d50 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
23d60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
23d70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23d80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23d90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
23da0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23db0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23dc0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23dd0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23de0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23df0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
23e00 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23e10 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
23e20 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
23e30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23e40 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
23e50 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
23e60 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
23e70 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23e80 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
23e90 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
23ea0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
23eb0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
23ec0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  E;.  if( pOp->p2
23ed0 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  >0 ){.    VdbeBr
23ee0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
23ef0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
23f00 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
23f10 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
23f20 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
23f30 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
23f40 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
23f50 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
23f60 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
23f70 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
23f80 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
23f90 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
23fa0 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
23fb0 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
23fc0 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
23fd0 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
23fe0 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
23ff0 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
24000 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
24010 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
24020 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
24030 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
24040 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
24050 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
24060 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
24070 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
24080 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
24090 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
240a0 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
240b0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
240c0 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
240d0 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
240e0 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
240f0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
24100 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
24110 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
24120 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
24130 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
24140 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53  .case OP_SorterS
24150 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  ort:    /* jump 
24160 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
24170 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
24180 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
24190 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
241a0 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
241b0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
241c0 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
241d0 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
241e0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
241f0 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  _SORT]++;.  /* F
24200 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
24210 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
24220 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
24230 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
24240 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
24250 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
24260 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
24270 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
24280 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
24290 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
242a0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
242b0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
242c0 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
242d0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
242e0 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
242f0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
24300 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
24310 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
24320 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
24330 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
24340 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
24350 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
24360 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
24370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
24380 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
24390 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
243a0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
243b0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
243c0 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
243d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
243e0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
243f0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24400 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24410 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
24430 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
24440 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
24450 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
24460 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73 53  s = 1;.  if( isS
24470 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
24480 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24490 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62  eSorterRewind(db
244a0 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  , pC, &res);.  }
244b0 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20  else{.    pCrsr 
244c0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
244d0 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
244e0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
244f0 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
24500 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
24510 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24520 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
24530 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24540 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
24550 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
24560 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e   = 0;.  }.  pC->
24570 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
24580 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
24590 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
245a0 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64  2<p->nOp );.  Vd
245b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
245c0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
245d0 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
245e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
245f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24600 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
24610 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
24620 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
24630 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
24640 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
24650 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
24660 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
24670 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
24680 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
24690 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
246a0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
246b0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
246c0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
246d0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
246e0 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
246f0 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
24700 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24710 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
24720 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
24730 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
24740 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
24750 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75  do-table.  P1 mu
24760 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20  st have.** been 
24770 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20  opened prior to 
24780 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74  this opcode or t
24790 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20  he program will 
247a0 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20  segfault..**.** 
247b0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
247c0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
247d0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
247e0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
247f0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
24800 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
24810 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
24820 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
24830 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
24840 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
24850 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
24860 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
24870 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
24880 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
24890 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
248a0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
248b0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
248c0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
248d0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
248e0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29  lite3BtreeNext()
248f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
24900 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
24910 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
24920 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
24930 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
24940 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
24950 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
24960 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
24970 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
24980 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f  v, NextIfOpen.*/
24990 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
249a0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
249b0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
249c0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
249d0 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
249e0 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
249f0 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
24a00 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
24a10 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
24a20 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
24a30 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24a40 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
24a50 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
24a60 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
24a70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
24a80 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
24a90 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
24aa0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
24ab0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
24ac0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
24ad0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
24ae0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
24af0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
24b00 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
24b10 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
24b20 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
24b30 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24b40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
24b50 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
24b60 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
24b70 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24b80 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
24b90 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
24ba0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
24bb0 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
24bc0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
24bd0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
24be0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
24bf0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
24c00 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
24c10 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
24c20 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
24c30 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
24c40 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
24c50 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
24c60 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
24c70 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
24c80 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
24c90 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
24ca0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
24cb0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
24cc0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
24cd0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
24ce0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
24cf0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
24d00 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
24d10 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
24d20 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
24d30 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
24d40 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
24d50 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
24d60 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
24d70 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
24d80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
24d90 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  evIfOpen P1 P2 P
24da0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
24db0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
24dc0 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50 72 65  just like OP_Pre
24dd0 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  v except that if
24de0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
24df0 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
24e00 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
24e10 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e  .case OP_SorterN
24e20 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20  ext: {  /* jump 
24e30 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24e40 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
24e50 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24e60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24e70 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
24e80 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ) );.  res = 0;.
24e90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24ea0 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
24eb0 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f   pC, &res);.  go
24ec0 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61  to next_tail;.ca
24ed0 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  se OP_PrevIfOpen
24ee0 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
24ef0 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70  case OP_NextIfOp
24f00 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
24f10 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  /.  if( p->apCsr
24f20 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62  [pOp->p1]==0 ) b
24f30 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
24f40 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20  through */.case 
24f50 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
24f60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
24f70 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20  e OP_Next:      
24f80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24f90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24fa0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24fb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24fc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41  ssert( pOp->p5<A
24fd0 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75  rraySize(p->aCou
24fe0 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20  nter) );.  pC = 
24ff0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25000 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e  ];.  res = pOp->
25010 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  p3;.  assert( pC
25020 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25030 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25040 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
25050 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20  rt( pC->pCursor 
25060 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73  );.  assert( res
25070 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26  ==0 || (res==1 &
25080 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  & pC->isTable==0
25090 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  ) );.  testcase(
250a0 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73   res==1 );.  ass
250b0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
250c0 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
250d0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
250e0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
250f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25100 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
25110 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  v || pOp->p4.xAd
25120 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
25130 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20  reePrevious );. 
25140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25150 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
25160 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
25170 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
25180 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
25190 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
251a0 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
251b0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
251c0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
251d0 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 20 20  reePrevious);.  
251e0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
251f0 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
25200 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
25210 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
25220 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25230 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
25240 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
25250 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  );.  if( res==0 
25260 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
25270 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d  ow = 0;.    pc =
25280 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25290 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
252a0 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
252b0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
252c0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
252d0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
252e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d    }else{.    pC-
252f0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
25300 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
25310 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f  alid = 0;.  goto
25320 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
25330 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
25340 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
25350 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53   P2 P3 * P5.** S
25360 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
25370 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
25380 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
25390 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
253a0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
253b0 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
253c0 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
253d0 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
253e0 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
253f0 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
25400 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
25410 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69   nil..**.** P3 i
25420 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72  s a flag that pr
25430 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f  ovides a hint to
25440 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65   the b-tree laye
25450 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69  r that this.** i
25460 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20  nsert is likely 
25470 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e  to be an append.
25480 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
25490 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
254a0 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  NGE bit set, the
254b0 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
254c0 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65  nter is.** incre
254d0 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69  mented by this i
254e0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
254f0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
25500 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  GE bit is clear,
25510 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61  .** then the cha
25520 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75  nge counter is u
25530 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20  nchanged..**.** 
25540 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
25550 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
25560 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  LT bit set, then
25570 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
25580 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f   have.** just do
25590 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65  ne a seek to the
255a0 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20   spot where the 
255b0 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20  new entry is to 
255c0 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20  be inserted..** 
255d0 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73  This flag avoids
255e0 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20   doing an extra 
255f0 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  seek..**.** This
25600 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
25610 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
25620 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
25630 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
25640 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
25650 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
25660 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
25670 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
25680 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
25690 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
256a0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
256b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
256c0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
256d0 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
256e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
256f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
25700 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25710 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25720 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25730 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25740 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25750 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
25760 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
25770 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
25780 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
25790 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
257a0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
257b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
257c0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
257d0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
257e0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
257f0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
25800 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65  Change++;.  asse
25810 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
25820 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25830 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63  Table==0 );.  rc
25840 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
25850 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  n2);.  if( rc==S
25860 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
25870 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
25880 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
25890 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
258a0 57 72 69 74 65 28 64 62 2c 20 70 43 2c 20 70 49  Write(db, pC, pI
258b0 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n2);.    }else{.
258c0 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e        nKey = pIn
258d0 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79  2->n;.      zKey
258e0 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20   = pIn2->z;.    
258f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25900 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c  reeInsert(pCrsr,
25910 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c   zKey, nKey, "",
25920 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20   0, 0, pOp->p3, 
25930 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70  .          ((pOp
25940 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
25950 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
25960 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
25970 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  0).          );.
25980 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
25990 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
259a0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
259b0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
259c0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
259d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
259e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
259f0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
25a00 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
25a10 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
25a20 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
25a30 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
25a40 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
25a50 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
25a60 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
25a70 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
25a80 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
25a90 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
25aa0 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
25ab0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
25ac0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
25ad0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
25ae0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
25af0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
25b00 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
25b10 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
25b20 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
25b30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25b40 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
25b50 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
25b60 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
25b70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
25b80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25b90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25ba0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25bb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25bc0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25bd0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
25be0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
25bf0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
25c00 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
25c10 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
25c20 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
25c30 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
25c40 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e  16)pOp->p3;.  r.
25c50 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
25c60 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
25c70 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65  [pOp->p2];.#ifde
25c80 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25c90 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
25ca0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
25cb0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
25cc0 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
25cd0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
25ce0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25cf0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
25d00 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
25d10 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
25d20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
25d30 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  res==0 ){.    rc
25d40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
25d50 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20  elete(pCrsr);.  
25d60 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  }.  assert( pC->
25d70 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
25d80 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  0 );.  pC->cache
25d90 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25da0 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
25db0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
25dc0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
25dd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
25de0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
25df0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
25e00 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
25e10 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
25e20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
25e30 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
25e40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
25e50 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
25e60 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
25e70 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
25e80 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
25e90 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
25ea0 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
25eb0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
25ec0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
25ed0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
25ee0 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
25ef0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
25f00 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
25f10 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
25f20 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73  ease */.  BtCurs
25f30 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
25f40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
25f50 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73  64 rowid;..  ass
25f60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25f70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25f80 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25f90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25fa0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25fb0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
25fc0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
25fd0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
25fe0 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
25ff0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 72   = MEM_Null;.  r
26000 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
26010 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
26020 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 29  .  if( NEVER(rc)
26030 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26040 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 61 73  e_to_error;.  as
26050 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
26060 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
26070 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
26080 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28  able==0 );.  if(
26090 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
260a0 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20  .    rowid = 0; 
260b0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
260c0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
260d0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
260e0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
260f0 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
26100 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77  (db, pCrsr, &row
26110 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
26120 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
26130 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
26140 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
26150 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
26160 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f   = rowid;.    pO
26170 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
26180 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  Int;.  }.  break
26190 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
261a0 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
261b0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
261c0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
261d0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
261e0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
261f0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
26200 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
26210 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
26220 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
26230 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
26240 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
26250 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
26260 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
26270 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
26280 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
26290 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
262a0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
262b0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
262c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
262d0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
262e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
262f0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
26300 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
26310 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
26320 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
26330 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
26340 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
26350 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
26360 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
26380 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
26390 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
263a0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
263b0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
263c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
263d0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
263e0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
263f0 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
26400 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
26410 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
26420 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
26430 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
26440 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
26450 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
26460 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
26470 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
26480 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
26490 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
264a0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
264b0 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
264c0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
264d0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
264e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
264f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
26500 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
26510 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26520 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
26530 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
26540 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
26550 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
26560 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
26570 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
26580 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
26590 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
265a0 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
265b0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
265c0 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
265d0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
265e0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
265f0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
26600 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
26610 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
26620 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
26630 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
26640 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
26650 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
26660 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
26670 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
26680 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
26690 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
266a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
266b0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
266c0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
266d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
266e0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
266f0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
26700 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
26710 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
26720 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
26730 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
26740 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
26750 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
26760 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
26770 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
26780 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
26790 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
267a0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
267b0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
267c0 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
267d0 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
267e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
267f0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
26800 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
26810 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
26820 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
26830 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
26840 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
26850 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
26860 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
26870 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
26880 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26890 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
268a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
268b0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
268c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
268d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
268e0 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
268f0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
26900 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
26910 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
26920 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
26930 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26940 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26950 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26960 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26970 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26980 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26990 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
269a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
269b0 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65  rsor!=0);.  asse
269c0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
269d0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
269e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
269f0 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  0 || pOp->p5==1 
26a00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26a10 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
26a20 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  32 );.  r.pKeyIn
26a30 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
26a40 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
26a50 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
26a60 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
26a70 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20  e<OP_IdxLT ){.  
26a80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26a90 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
26aa0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
26ab0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
26ac0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
26ad0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
26ae0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26af0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
26b00 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26b10 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxLT );.    r.
26b20 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
26b30 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26    }.  r.aMem = &
26b40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
26b50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26b60 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  UG.  { int i; fo
26b70 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
26b80 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
26b90 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
26ba0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
26bb0 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f  if.  res = 0;  /
26bc0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
26bd0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
26be0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
26bf0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
26c00 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
26c10 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  e(pC, &r, &res);
26c20 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
26c30 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
26c40 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
26c50 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
26c60 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
26c70 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
26c80 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
26c90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26ca0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
26cb0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
26cc0 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
26cd0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
26ce0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
26cf0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26d00 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
26d10 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
26d20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
26d30 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
26d40 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
26d50 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20  if( res>0 ){.   
26d60 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
26d70 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1 ;.  }.  break;
26d80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
26d90 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
26da0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
26db0 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
26dc0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
26dd0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
26de0 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
26df0 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
26e00 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
26e10 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
26e20 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
26e30 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
26e40 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
26e50 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
26e60 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
26e70 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
26e80 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
26e90 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
26ea0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
26eb0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
26ec0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
26ed0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
26ee0 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
26ef0 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
26f00 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
26f10 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
26f20 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
26f30 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
26f40 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
26f50 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
26f60 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
26f70 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
26f80 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
26f90 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
26fa0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
26fb0 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
26fc0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
26fd0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
26fe0 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
26ff0 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
27000 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
27010 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
27020 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
27030 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
27040 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
27050 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
27060 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
27070 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
27080 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
27090 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
270a0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
270b0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
270c0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
270d0 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
270e0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
270f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
27100 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
27110 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
27120 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
27130 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
27140 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ase */.  int iMo
27150 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b  ved;.  int iCnt;
27160 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a  .  Vdbe *pVdbe;.
27170 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73    int iDb;..  as
27180 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
27190 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  y==0 );.#ifndef 
271a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
271b0 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
271c0 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
271d0 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
271e0 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
271f0 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
27200 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
27210 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
27220 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64  & pVdbe->bIsRead
27230 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62  er .     && pVdb
27240 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
27250 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
27260 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  0 .    ){.      
27270 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
27280 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
27290 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a   db->nVdbeRead;.
272a0 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66  #endif.  pOut->f
272b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
272c0 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b  .  if( iCnt>1 ){
272d0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
272e0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
272f0 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
27300 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
27310 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
27320 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
27330 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
27340 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
27350 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
27360 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29  k)1)<<iDb))!=0 )
27370 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
27380 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
27390 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
273a0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
273b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
273c0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
273d0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
273e0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
273f0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
27400 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
27410 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
27420 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
27430 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27440 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
27450 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
27460 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
27470 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
27480 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
27490 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
274a0 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
274b0 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
274c0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
274d0 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
274e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
274f0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
27500 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
27510 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
27520 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
27530 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
27540 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
27550 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
27560 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
27570 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
27580 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
27590 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
275a0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
275b0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
275c0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
275d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
275e0 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
275f0 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
27600 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
27610 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
27620 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
27630 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
27640 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
27650 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
27660 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
27670 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
27680 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
27690 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
276a0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
276b0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
276c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
276d0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
276e0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
276f0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
27700 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
27710 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
27720 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
27730 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
27740 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
27750 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
27760 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
27770 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
27780 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
27790 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
277a0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
277b0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
277c0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
277d0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
277e0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
277f0 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
27800 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
27810 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
27820 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
27830 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
27840 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
27850 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
27860 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
27870 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
27880 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
27890 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
278a0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
278b0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
278c0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
278d0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
278e0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
278f0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
27900 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
27910 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a  pOp->p2))!=0 );.
27920 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27930 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
27940 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
27950 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
27960 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
27970 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
27980 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
27990 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
279a0 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
279b0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
279c0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
279d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
279e0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
279f0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
27a00 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
27a10 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
27a20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
27a30 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
27a40 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
27a50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
27a60 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20  esetSorter P1 * 
27a70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  * * *.**.** Dele
27a80 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
27a90 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72  from the ephemer
27aa0 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74  al table or sort
27ab0 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70  er.** that is op
27ac0 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  en on cursor P1.
27ad0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27ae0 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  de only works fo
27af0 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66  r cursors used f
27b00 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a  or sorting and.*
27b10 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50  * opened with OP
27b20 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
27b30 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e  r OP_SorterOpen.
27b40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
27b50 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62  tSorter: {.  Vdb
27b60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20  eCursor *pC;. . 
27b70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27b80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27b90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27ba0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27bb0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27bc0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
27bd0 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20  pC->pSorter ){. 
27be0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
27bf0 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
27c00 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65  ->pSorter);.  }e
27c10 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
27c20 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c   pC->isEphemeral
27c30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
27c40 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
27c50 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e  bleOfCursor(pC->
27c60 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
27c70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27c80 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
27c90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
27ca0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
27cb0 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a  root iDb=P1.**.*
27cc0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
27cd0 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61   table in the ma
27ce0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
27cf0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
27d00 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
27d10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
27d20 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
27d30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
27d40 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
27d50 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
27d60 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
27d70 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
27d80 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a  .** register P2.
27d90 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
27da0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74  ence between a t
27db0 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65  able and an inde
27dc0 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61  x is this:  A ta
27dd0 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  ble must.** have
27de0 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65   a 4-byte intege
27df0 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61  r key and can ha
27e00 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74  ve arbitrary dat
27e10 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20  a.  An index.** 
27e20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  has an arbitrary
27e30 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61   key but no data
27e40 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
27e50 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f  : CreateIndex.*/
27e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
27e70 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20  teIndex P1 P2 * 
27e80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
27e90 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
27ea0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
27eb0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
27ec0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
27ed0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
27ee0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
27ef0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
27f00 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
27f10 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
27f20 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
27f30 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
27f40 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
27f50 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
27f60 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
27f70 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
27f80 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
27f90 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
27fa0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
27fb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
27fc0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
27fd0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
27fe0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
27ff0 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ase */.case OP_C
28000 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
28010 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
28020 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
28030 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
28040 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
28050 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ..  pgno = 0;.  
28060 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
28070 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
28080 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
28090 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
280a0 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
280b0 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
280c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
280d0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
280e0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
280f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28100 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
28110 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
28120 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
28130 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
28140 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
28150 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
28160 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
28170 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
28180 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
28190 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
281a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
281b0 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
281c0 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
281d0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
281e0 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
281f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
28200 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
28210 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
28220 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
28230 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
28240 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
28250 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
28260 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
28270 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
28280 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
28290 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
282a0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
282b0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
282c0 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
282d0 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
282e0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
282f0 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
28300 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
28310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
28320 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
28330 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
28340 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
28350 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
28360 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
28370 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
28380 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
28390 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
283a0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
283b0 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
283c0 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
283d0 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
283e0 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
283f0 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
28400 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
28410 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
28420 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
28430 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
28440 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
28450 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
28460 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
28470 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
28480 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
28490 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d  .#endif..  iDb =
284a0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
284b0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
284c0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
284d0 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70  ssert( DbHasProp
284e0 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
284f0 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
28500 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62  ;.  /* Used to b
28510 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  e a conditional 
28520 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72  */ {.    zMaster
28530 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
28540 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61  iDb);.    initDa
28550 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
28560 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
28570 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74  Op->p1;.    init
28580 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
28590 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
285a0 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zSql = sqlite3M
285b0 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20  Printf(db,.     
285c0 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
285d0 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
285e0 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
285f0 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
28600 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e  id",.       db->
28610 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  aDb[iDb].zName, 
28620 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34  zMaster, pOp->p4
28630 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71  .z);.    if( zSq
28640 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  l==0 ){.      rc
28650 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
28660 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
28670 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e    assert( db->in
28680 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20  it.busy==0 );.  
28690 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
286a0 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69  y = 1;.      ini
286b0 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54  tData.rc = SQLIT
286c0 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65  E_OK;.      asse
286d0 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
286e0 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
286f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
28700 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
28710 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
28720 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
28730 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
28740 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
28750 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20  itData.rc;.     
28760 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
28770 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  b, zSql);.      
28780 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
28790 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  0;.    }.  }.  i
287a0 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52  f( rc ) sqlite3R
287b0 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
287c0 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
287d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
287e0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
287f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
28800 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
28810 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28820 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
28830 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
28840 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
28850 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
28860 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
28870 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
28880 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
28890 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
288a0 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
288b0 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
288c0 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
288d0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
288e0 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
288f0 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
28900 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
28910 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
28920 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
28930 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
28940 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28950 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
28960 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
28970 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
28980 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
28990 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
289a0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
289b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
289c0 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  YZE) */../* Opco
289d0 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31  de: DropTable P1
289e0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
289f0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
28a00 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
28a10 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
28a20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
28a30 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
28a40 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
28a50 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
28a60 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c  led after a tabl
28a70 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  e.** is dropped 
28a80 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
28a90 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
28aa0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
28ab0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
28ac0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
28ad0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
28ae0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
28af0 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
28b00 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
28b10 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
28b20 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
28b30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28b40 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
28b50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
28b60 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
28b70 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
28b80 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
28b90 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
28ba0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
28bb0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
28bc0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
28bd0 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
28be0 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
28bf0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
28c00 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
28c10 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
28c20 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
28c30 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
28c40 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
28c50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
28c60 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
28c70 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28c80 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
28c90 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
28ca0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28cb0 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
28cc0 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
28cd0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
28ce0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
28cf0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
28d00 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
28d10 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
28d20 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
28d30 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
28d40 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
28d50 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
28d60 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
28d70 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
28d80 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
28d90 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
28da0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
28db0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
28dc0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
28dd0 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
28de0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
28df0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
28e00 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
28e10 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
28e20 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
28e30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
28e40 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
28e50 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
28e60 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
28e70 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
28e80 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
28e90 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
28ea0 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
28eb0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
28ec0 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
28ed0 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
28ee0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
28ef0 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
28f00 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
28f10 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
28f20 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
28f30 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
28f40 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
28f50 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
28f60 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
28f70 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
28f80 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
28f90 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
28fa0 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
28fb0 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
28fc0 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
28fd0 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
28fe0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
28ff0 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
29000 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
29010 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
29020 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
29030 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
29040 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
29050 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
29060 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
29070 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
29080 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
29090 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
290a0 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
290b0 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
290c0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
290d0 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
290e0 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
290f0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
29100 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
29110 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
29120 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
29130 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
29140 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
29150 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
29160 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
29170 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
29180 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
29190 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
291a0 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
291b0 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
291c0 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
291d0 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
291e0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
291f0 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
29200 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
29210 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
29220 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
29230 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
29240 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
29250 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
29260 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
29270 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
29280 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
29290 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
292a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
292b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
292c0 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
292d0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
292e0 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ng */..  assert(
292f0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
29300 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
29310 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
29320 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
29330 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
29340 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
29350 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
29360 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
29370 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
29380 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29390 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
293a0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
293b0 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
293c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
293d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
293e0 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
293f0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
29400 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
29410 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
29420 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
29430 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
29440 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
29450 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
29460 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
29470 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
29480 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
29490 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
294a0 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
294b0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
294c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
294d0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
294e0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
294f0 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a  pOp->p5))!=0 );.
29500 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72    z = sqlite3Btr
29510 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b  eeIntegrityCheck
29520 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35  (db->aDb[pOp->p5
29530 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52  ].pBt, aRoot, nR
29540 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
29550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29560 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
29570 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20  ->u.i, &nErr);. 
29580 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
29590 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45  b, aRoot);.  pnE
295a0 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b  rr->u.i -= nErr;
295b0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
295c0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
295d0 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b    if( nErr==0 ){
295e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d  .    assert( z==
295f0 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  0 );.  }else if(
29600 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74   z==0 ){.    got
29610 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73  o no_mem;.  }els
29620 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
29630 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31  beMemSetStr(pIn1
29640 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  , z, -1, SQLITE_
29650 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72  UTF8, sqlite3_fr
29660 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ee);.  }.  UPDAT
29670 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
29680 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
29690 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
296a0 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  g(pIn1, encoding
296b0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
296c0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
296d0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
296e0 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ECK */../* Opcod
296f0 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20  e: RowSetAdd P1 
29700 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
29710 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31  psis:  rowset(P1
29720 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
29730 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
29740 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
29750 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
29760 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
29770 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
29780 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
29790 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
297a0 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
297b0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
297c0 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
297d0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
297e0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
297f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
29800 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
29810 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
29820 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
29830 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
29840 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
29850 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
29860 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
29870 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
29880 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
29890 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
298a0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
298b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
298c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
298d0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
298e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
298f0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
29900 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
29910 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
29920 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
29930 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74  s:  r[P3]=rowset
29940 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61  (P1).**.** Extra
29950 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  ct the smallest 
29960 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65  value from boole
29970 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20  an index P1 and 
29980 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
29990 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
299a0 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c  P3.  Or, if bool
299b0 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20  ean index P1 is 
299c0 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
299d0 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
299e0 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
299f0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
29a00 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
29a10 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
29a20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
29a30 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
29a40 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
29a50 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
29a60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29a70 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29a80 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
29a90 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
29aa0 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
29ab0 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
29ac0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
29ad0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
29ae0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29af0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
29b00 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
29b10 2d 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61  - 1;.    VdbeBra
29b20 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
29b30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
29b40 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
29b50 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
29b60 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
29b70 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
29b80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
29b90 61 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  al);.    VdbeBra
29ba0 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20  nchTaken(0,2);. 
29bb0 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
29bc0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
29bd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
29be0 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
29bf0 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
29c00 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77   if r[P3] in row
29c10 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a  set(P1) goto P2.
29c20 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
29c30 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
29c40 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
29c50 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
29c60 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
29c70 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
29c80 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
29c90 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
29ca0 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
29cb0 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
29cc0 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
29cd0 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
29ce0 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
29cf0 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
29d00 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
29d10 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
29d20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
29d30 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
29d40 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
29d50 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
29d60 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
29d70 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
29d80 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
29d90 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
29da0 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
29db0 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
29dc0 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
29dd0 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
29de0 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
29df0 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
29e00 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
29e10 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
29e20 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
29e30 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
29e40 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
29e50 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
29e60 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
29e70 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
29e80 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
29e90 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
29ea0 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
29eb0 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
29ec0 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
29ed0 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
29ee0 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
29ef0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
29f00 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
29f10 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
29f20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
29f30 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
29f40 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
29f50 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
29f60 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
29f70 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
29f80 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
29f90 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
29fa0 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
29fb0 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
29fc0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
29fd0 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
29fe0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
29ff0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
2a000 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2a010 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
2a020 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
2a030 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
2a040 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
2a050 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
2a060 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
2a070 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
2a080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
2a090 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
2a0a0 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
2a0b0 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
2a0c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a0d0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
2a0e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
2a0f0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
2a100 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
2a110 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2a120 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
2a130 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
2a140 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
2a150 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
2a160 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
2a170 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
2a180 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
2a190 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
2a1a0 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
2a1b0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2a1c0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
2a1d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2a1e0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
2a1f0 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
2a200 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2a210 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
2a220 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
2a230 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2a240 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2a250 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
2a260 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
2a270 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
2a280 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
2a290 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
2a2a0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2a2b0 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  iSet, pIn3->u.i)
2a2c0 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2a2d0 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
2a2e0 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
2a2f0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
2a300 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2a310 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2a320 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
2a330 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2a340 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2a350 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2a360 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
2a370 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2a380 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a390 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
2a3a0 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
2a3b0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2a3c0 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
2a3d0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
2a3e0 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
2a3f0 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
2a400 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
2a410 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
2a420 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2a430 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
2a440 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
2a450 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
2a460 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
2a470 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
2a480 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
2a490 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
2a4a0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2a4b0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
2a4c0 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
2a4d0 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
2a4e0 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
2a4f0 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
2a500 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
2a510 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2a520 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
2a530 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
2a540 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
2a550 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
2a560 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
2a570 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
2a580 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2a590 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
2a5a0 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
2a5b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2a5c0 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
2a5d0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2a5e0 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
2a5f0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
2a600 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
2a610 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
2a620 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
2a630 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
2a640 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2a650 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a670 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
2a680 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
2a690 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2a6a0 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
2a6b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2a6c0 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
2a6d0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
2a6e0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2a6f0 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
2a700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
2a710 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
2a720 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
2a730 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a750 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
2a760 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
2a770 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
2a780 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
2a790 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
2a7a0 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
2a7b0 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
2a7c0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
2a7d0 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
2a7e0 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
2a7f0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
2a800 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
2a810 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
2a820 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
2a830 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
2a840 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
2a850 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
2a860 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
2a870 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
2a880 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
2a890 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2a8a0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a8b0 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
2a8c0 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
2a8d0 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
2a8e0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2a8f0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
2a900 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2a910 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
2a920 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
2a930 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
2a940 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
2a950 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
2a960 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
2a970 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
2a980 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
2a990 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
2a9a0 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
2a9b0 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
2a9c0 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
2a9d0 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
2a9e0 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
2a9f0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2aa00 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
2aa10 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
2aa20 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
2aa30 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
2aa40 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
2aa50 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
2aa60 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
2aa70 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
2aa80 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
2aa90 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
2aaa0 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2aab0 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
2aac0 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
2aad0 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
2aae0 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
2aaf0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2ab00 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
2ab10 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
2ab20 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2ab30 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
2ab40 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
2ab50 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
2ab60 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
2ab70 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
2ab80 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
2ab90 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2aba0 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
2abb0 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
2abc0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2abd0 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
2abe0 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
2abf0 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
2ac00 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
2ac10 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
2ac20 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
2ac30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2ac40 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
2ac50 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2ac60 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20  rrMsg, db, "too 
2ac70 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2ac80 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2ac90 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2aca0 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2acb0 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2acc0 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2acd0 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2ace0 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2acf0 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2ad00 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2ad10 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2ad20 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2ad30 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2ad40 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2ad50 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2ad60 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2ad70 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2ad80 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2ad90 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2ada0 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2adb0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2adc0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2add0 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2ade0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2adf0 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2ae00 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2ae10 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2ae20 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2ae30 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2ae40 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2ae50 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2ae60 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2ae70 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2ae80 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2ae90 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2aea0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2aeb0 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2aec0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2aed0 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2aee0 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2aef0 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2af00 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2af10 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2af20 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2af30 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2af40 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2af50 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2af60 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2af70 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2af80 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2af90 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2afa0 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2afb0 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2afc0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2afd0 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2afe0 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2aff0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2b000 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2b010 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2b020 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2b030 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2b040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2b050 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2b060 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2b070 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2b080 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2b090 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2b0a0 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2b0b0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2b0c0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2b0d0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2b0e0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2b0f0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70    pFrame->pc = p
2b100 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  c;.    pFrame->a
2b110 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2b120 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2b130 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2b140 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2b150 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2b160 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2b170 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2b180 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2b190 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2b1a0 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2b1b0 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2b1c0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2b1d0 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2b1e0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2b1f0 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2b200 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2b210 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2b220 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62  .    pEnd = &Vdb
2b230 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2b240 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  )[pFrame->nChild
2b250 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d  Mem];.    for(pM
2b260 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  em=VdbeFrameMem(
2b270 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70  pFrame); pMem!=p
2b280 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  End; pMem++){.  
2b290 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
2b2a0 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
2b2b0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
2b2c0 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
2b2d0 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
2b2e0 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b  = pRt->u.pFrame;
2b2f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2b300 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
2b310 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2b320 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b  me->nChildMem );
2b330 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2b340 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2b350 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
2b360 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  ;.    assert( pc
2b370 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
2b380 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
2b390 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
2b3a0 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
2b3b0 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
2b3c0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
2b3d0 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
2b3e0 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
2b3f0 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
2b400 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
2b410 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
2b420 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
2b430 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2b440 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
2b450 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
2b460 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
2b470 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
2b480 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
2b490 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
2b4a0 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
2b4b0 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
2b4c0 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
2b4d0 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
2b4e0 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
2b4f0 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
2b500 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
2b510 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
2b520 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
2b530 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
2b540 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d  >nOnce;.  pc = -
2b550 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  1;.  memset(p->a
2b560 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2b570 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2b580 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b590 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2b5a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2b5b0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2b5c0 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2b5d0 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2b5e0 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2b5f0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2b600 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2b610 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2b620 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2b630 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2b640 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2b650 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2b660 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2b670 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2b680 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2b690 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2b6a0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2b6b0 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2b6c0 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2b6d0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2b6e0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2b6f0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2b700 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2b710 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2b720 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2b730 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2b740 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2b750 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2b760 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2b770 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2b780 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2b790 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2b7a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2b7b0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2b7c0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2b7d0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
2b7e0 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
2b7f0 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
2b800 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2b810 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
2b820 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
2b830 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
2b840 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
2b850 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
2b860 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
2b870 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
2b880 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b890 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
2b8a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b8b0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2b8c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
2b8d0 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
2b8e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
2b8f0 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
2b900 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
2b910 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2b920 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
2b930 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
2b940 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
2b950 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2b960 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2b970 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2b980 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2b990 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
2b9a0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2b9b0 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
2b9c0 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
2b9d0 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
2b9e0 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
2b9f0 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
2ba00 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2ba10 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
2ba20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
2ba30 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
2ba40 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2ba50 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
2ba60 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2ba70 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
2ba80 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
2ba90 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
2baa0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
2bab0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2bac0 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
2bad0 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
2bae0 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
2baf0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2bb00 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
2bb10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2bb20 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
2bb30 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2bb40 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
2bb50 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
2bb60 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
2bb70 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
2bb80 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
2bb90 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
2bba0 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
2bbb0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2bbc0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
2bbd0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2bbe0 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
2bbf0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2bc00 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2bc10 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2bc20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2bc30 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
2bc40 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
2bc50 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
2bc60 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2bc70 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
2bc80 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
2bc90 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
2bca0 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
2bcb0 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
2bcc0 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
2bcd0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2bce0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2bcf0 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
2bd00 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
2bd10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2bd20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
2bd30 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2bd40 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
2bd50 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2bd60 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2bd70 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2bd80 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2bd90 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2bda0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2bdb0 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2bdc0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2bdd0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2bde0 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
2bdf0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2be00 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2be10 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
2be20 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2be30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2be40 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2be50 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2be60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2be70 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2be80 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2be90 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2bea0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2beb0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2bec0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2bed0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2bee0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2bef0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2bf00 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2bf10 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2bf20 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2bf30 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2bf40 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2bf50 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2bf60 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2bf70 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2bf80 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2bf90 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2bfa0 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2bfb0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2bfc0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2bfd0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2bfe0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2bff0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2c000 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2c010 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2c020 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2c030 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2c040 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2c050 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2c060 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2c070 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2c080 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2c090 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2c0a0 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
2c0b0 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
2c0c0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2c0d0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
2c0e0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2c0f0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
2c100 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
2c110 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
2c120 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
2c130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2c140 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
2c150 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
2c160 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2c170 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
2c180 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
2c190 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
2c1a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2c1b0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
2c1c0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
2c1d0 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
2c1e0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
2c1f0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
2c200 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2c210 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2c220 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
2c230 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
2c240 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2c250 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
2c260 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2c270 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2c280 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
2c290 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d   or greater, jum
2c2a0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
2c2b0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
2c2c0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
2c2d0 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
2c2e0 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
2c2f0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
2c300 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
2c310 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
2c320 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
2c330 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
2c340 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
2c350 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2c360 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2c370 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c380 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2c390 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
2c3a0 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31  ranchTaken( pIn1
2c3b0 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69  ->u.i>0, 2);.  i
2c3c0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
2c3d0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2c3e0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2c3f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c400 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
2c410 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2c420 73 3a 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f  s: if r[P1]<0 go
2c430 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  to P2.**.** If t
2c440 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2c450 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2c460 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
2c470 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
2c480 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2c490 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2c4a0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2c4b0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2c4c0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2c4d0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2c4e0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2c4f0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2c500 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2c510 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
2c520 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2c530 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2c540 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c550 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2c560 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
2c570 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
2c580 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i<0, 2);.  if(
2c590 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
2c5a0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2c5b0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2c5c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c5d0 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
2c5e0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2c5f0 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66  s: r[P1]+=P3, if
2c600 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50   r[P1]==0 goto P
2c610 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  2.**.** The regi
2c620 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2c630 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2c640 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
2c650 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   to the.** value
2c660 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2c670 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20    If the result 
2c680 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
2c690 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2c6a0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2c6b0 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2c6c0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2c6d0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2c6e0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2c6f0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2c700 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2c710 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2c720 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2c730 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
2c740 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2c750 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2c760 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c770 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2c780 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2c790 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2c7a0 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  p3;.  VdbeBranch
2c7b0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2c7c0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
2c7d0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
2c7e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2c7f0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2c800 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c810 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2c820 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2c830 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2c840 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2c850 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2c860 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2c870 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2c880 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2c890 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2c8a0 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2c8b0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2c8c0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2c8d0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2c8e0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2c8f0 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2c900 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2c910 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2c920 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2c930 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2c940 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2c950 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2c960 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2c970 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2c980 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2c990 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2c9a0 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2c9b0 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
2c9c0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
2c9d0 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
2c9e0 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
2c9f0 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65  );.  pRec = &aMe
2ca00 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
2ca10 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
2ca20 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
2ca30 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
2ca40 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
2ca50 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pRec++){.    ass
2ca60 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2ca70 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56  pRec) );.    apV
2ca80 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
2ca90 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2caa0 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d  ge(p, pRec);.  }
2cab0 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2cac0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2cad0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2cae0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2caf0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2cb00 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  r) );.  ctx.pMem
2cb10 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2cb20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2cb30 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
2cb40 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2cb50 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
2cb60 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
2cb70 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
2cb80 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
2cb90 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
2cba0 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
2cbb0 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74  .pColl = 0;.  ct
2cbc0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2cbd0 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
2cbe0 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c  >funcFlags & SQL
2cbf0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
2cc00 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
2cc10 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
2cc20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2cc30 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
2cc40 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
2cc50 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2cc60 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2cc70 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
2cc80 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
2cc90 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e  oll;.  }.  (ctx.
2cca0 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63  pFunc->xStep)(&c
2ccb0 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
2ccc0 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
2ccd0 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74  3230 */.  if( ct
2cce0 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
2ccf0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2cd00 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2cd10 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2cd20 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
2cd30 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
2cd40 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
2cd50 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c    if( ctx.skipFl
2cd60 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
2cd70 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2cd80 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2cd90 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
2cda0 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
2cdb0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2cdc0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
2cdd0 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69   1);.  }..  sqli
2cde0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2cdf0 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72  e(&ctx.s);..  br
2ce00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ce10 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
2ce20 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
2ce30 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
2ce40 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
2ce50 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2ce60 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2ce70 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2ce80 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2ce90 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2cea0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2ceb0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2cec0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2ced0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2cee0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2cef0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2cf00 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2cf10 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2cf20 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2cf30 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2cf40 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2cf50 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2cf60 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2cf70 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2cf80 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2cf90 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2cfa0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2cfb0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2cfc0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2cfd0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2cfe0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2cff0 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2d000 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2d010 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2d020 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2d030 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2d040 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2d050 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2d060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d070 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2d080 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2d090 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
2d0a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d0b0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2d0c0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2d0d0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2d0e0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2d0f0 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2d100 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2d110 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2d120 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2d130 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d140 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d150 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2d160 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2d170 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2d180 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2d190 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2d1a0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2d1b0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2d1c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2d1d0 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2d1e0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2d1f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d200 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d210 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2d220 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2d230 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2d240 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2d250 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2d260 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2d270 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2d280 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2d290 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2d2a0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2d2b0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2d2c0 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2d2d0 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2d2e0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2d2f0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2d300 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2d310 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2d320 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2d330 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2d340 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2d350 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2d360 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2d370 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2d380 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2d390 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2d3a0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2d3b0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2d3c0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2d3d0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2d3e0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2d3f0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2d400 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2d410 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2d420 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2d430 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2d440 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2d450 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d470 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2d480 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2d490 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2d4a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2d4b0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2d4c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2d4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2d4e0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2d4f0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2d500 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2d510 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
2d520 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
2d530 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
2d540 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
2d550 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2d560 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
2d570 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2d580 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
2d590 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2d5a0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2d5b0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29  OINT_RESTART.  )
2d5c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2d5d0 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2d5e0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
2d5f0 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
2d600 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
2d610 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
2d620 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2d630 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
2d640 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
2d650 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
2d660 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
2d670 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
2d680 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d690 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
2d6a0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
2d6b0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
2d6c0 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
2d6d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
2d6e0 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
2d6f0 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
2d700 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2d710 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2d720 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2d730 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2d740 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2d750 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2d760 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2d770 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2d780 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2d790 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2d7a0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2d7b0 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2d7c0 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2d7d0 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2d7e0 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2d7f0 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2d800 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2d810 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2d820 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2d830 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2d840 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2d850 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2d860 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2d870 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2d880 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2d890 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2d8a0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2d8b0 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2d8c0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2d8d0 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d8f0 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2d900 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2d910 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2d920 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2d930 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2d940 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2d950 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2d960 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2d970 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2d980 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2d990 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9b0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2d9c0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2d9d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d9e0 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2d9f0 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2da00 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2da10 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2da20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2da30 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2da40 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2da50 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2da60 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2da70 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2da80 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2da90 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2daa0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2dab0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2dac0 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2dad0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2dae0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2daf0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2db00 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2db10 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2db20 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2db30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2db40 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2db50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2db60 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2db70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2db80 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2db90 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2dba0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2dbb0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2dbc0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2dbd0 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2dbe0 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2dbf0 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2dc00 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2dc10 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2dc20 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2dc30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2dc40 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2dc50 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2dc60 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2dc70 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2dc80 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2dc90 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2dca0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2dcb0 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2dcc0 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2dcd0 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2dce0 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2dcf0 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2dd00 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2dd10 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2dd20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2dd30 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2dd40 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2dd50 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2dd60 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2dd70 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2dd80 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2dd90 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2dda0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2ddb0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2ddc0 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2ddd0 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2dde0 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2ddf0 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2de00 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2de10 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2de20 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2de30 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2de40 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2de50 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2de60 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2de70 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2de80 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2de90 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2dea0 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2deb0 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2dec0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2ded0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2dee0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2def0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2df00 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2df10 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2df20 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2df30 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2df40 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2df50 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2df60 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2df70 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2df80 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2df90 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2dfa0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2dfb0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2dfc0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2dfd0 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2dfe0 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2dff0 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2e000 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2e010 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2e020 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2e030 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2e040 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2e050 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2e060 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2e070 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2e080 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2e090 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2e0a0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2e0b0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2e0c0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2e0d0 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2e0e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2e0f0 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2e100 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2e110 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2e120 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2e130 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2e140 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2e150 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2e160 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2e170 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2e180 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2e190 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2e1a0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2e1b0 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2e1c0 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2e1d0 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2e1e0 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2e1f0 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2e200 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2e210 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2e220 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2e230 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2e240 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2e250 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2e260 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2e270 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2e280 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2e290 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2e2a0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2e2b0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2e2c0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2e2d0 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2e2e0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2e2f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2e300 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2e310 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2e320 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2e330 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2e340 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2e350 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2e360 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2e370 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2e380 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2e390 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2e3a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2e3b0 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2e3c0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2e3d0 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2e3e0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2e3f0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2e400 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2e410 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2e420 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2e430 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2e440 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2e450 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2e460 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2e470 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2e480 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2e490 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2e4a0 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2e4b0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2e4c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2e4d0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2e4e0 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2e4f0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2e500 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e510 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2e520 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2e530 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2e540 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2e550 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2e560 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2e570 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2e580 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2e590 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2e5a0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2e5b0 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2e5c0 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2e5d0 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2e5e0 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2e5f0 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2e600 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2e610 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2e620 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2e630 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2e640 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2e650 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2e660 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2e670 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2e680 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2e690 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2e6a0 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2e6b0 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2e6c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2e6d0 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2e6e0 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2e6f0 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2e700 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2e710 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2e720 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2e730 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2e740 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2e750 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2e760 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2e770 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2e780 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2e790 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2e7a0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2e7b0 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2e7c0 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2e7d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2e7e0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2e7f0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
2e800 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2e810 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
2e820 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
2e830 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2e840 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2e850 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2e860 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2e870 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2e880 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
2e890 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
2e8a0 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
2e8b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
2e8c0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
2e8d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2e8e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2e8f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e900 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
2e910 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
2e920 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
2e930 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
2e940 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
2e950 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
2e960 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
2e970 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
2e980 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
2e990 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
2e9a0 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
2e9b0 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
2e9c0 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
2e9d0 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
2e9e0 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
2e9f0 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
2ea00 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
2ea10 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
2ea20 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
2ea30 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
2ea40 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
2ea50 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
2ea60 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
2ea70 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
2ea80 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
2ea90 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2eaa0 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
2eab0 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
2eac0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
2ead0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2eae0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2eaf0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
2eb00 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
2eb10 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
2eb20 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
2eb30 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
2eb40 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
2eb50 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
2eb60 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
2eb70 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
2eb80 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
2eb90 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
2eba0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
2ebb0 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
2ebc0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2ebd0 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
2ebe0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
2ebf0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2ec00 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
2ec10 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
2ec20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
2ec30 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
2ec40 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
2ec50 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
2ec60 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
2ec70 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
2ec80 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
2ec90 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
2eca0 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
2ecb0 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
2ecc0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
2ecd0 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
2ece0 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
2ecf0 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
2ed00 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
2ed10 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
2ed20 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
2ed30 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
2ed40 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
2ed50 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
2ed60 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
2ed70 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
2ed80 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
2ed90 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
2eda0 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
2edb0 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
2edc0 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
2edd0 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
2ede0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
2edf0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
2ee00 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  )<<p1))!=0 );.  
2ee10 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
2ee20 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
2ee30 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
2ee40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2ee50 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
2ee60 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
2ee70 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
2ee80 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
2ee90 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
2eea0 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
2eeb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
2eec0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
2eed0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2eee0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2eef0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
2ef00 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
2ef10 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
2ef20 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ef30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ef40 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
2ef50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ef60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ef70 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
2ef80 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
2ef90 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2efa0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
2efb0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2efc0 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
2efd0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
2efe0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
2eff0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
2f000 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
2f010 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
2f020 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
2f030 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
2f040 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
2f050 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
2f060 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2f070 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
2f080 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
2f090 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
2f0a0 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
2f0b0 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
2f0c0 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
2f0d0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
2f0e0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
2f0f0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
2f100 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2f110 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
2f120 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
2f130 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2f140 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
2f150 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2f160 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f170 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f180 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2f190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f1a0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2f1b0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2f1c0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2f1d0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2f1e0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2f1f0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2f200 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2f210 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2f220 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2f230 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2f240 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2f250 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2f260 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2f270 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2f280 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2f290 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f2a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f2b0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2f2c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2f2d0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2f2e0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2f2f0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2f300 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2f310 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2f320 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2f330 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2f340 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2f350 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2f360 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2f370 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2f380 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2f390 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2f3a0 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2f3b0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2f3c0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2f3d0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2f3e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2f3f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f400 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2f410 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2f420 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2f430 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2f440 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2f450 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2f460 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2f470 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2f480 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2f490 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2f4a0 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2f4b0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2f4c0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2f4d0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2f4e0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2f4f0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2f500 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2f510 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2f520 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2f530 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2f540 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2f550 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2f560 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2f570 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2f580 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2f590 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
2f5a0 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2f5b0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2f5c0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2f5d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2f5e0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2f5f0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2f600 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2f610 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2f620 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2f630 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2f640 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
2f650 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2f660 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2f670 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2f680 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2f690 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2f6a0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2f6b0 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2f6c0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2f6d0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2f6e0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2f6f0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2f700 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2f710 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2f720 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2f730 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2f740 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2f750 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2f760 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2f770 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2f780 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2f790 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2f7a0 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2f7b0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2f7c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f7d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2f7e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2f7f0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2f800 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f810 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f820 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
2f830 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2f840 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
2f850 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
2f860 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
2f870 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
2f880 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
2f890 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
2f8a0 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
2f8b0 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
2f8c0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
2f8d0 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
2f8e0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
2f8f0 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
2f900 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
2f910 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
2f920 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
2f930 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
2f940 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
2f950 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
2f960 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
2f970 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
2f980 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2f990 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
2f9a0 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
2f9b0 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
2f9c0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
2f9d0 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
2f9e0 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
2f9f0 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
2fa00 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2fa10 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
2fa20 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
2fa30 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
2fa40 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
2fa50 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
2fa60 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
2fa70 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
2fa80 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
2fa90 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
2faa0 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
2fab0 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
2fac0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
2fad0 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
2fae0 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
2faf0 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
2fb00 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
2fb10 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
2fb20 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
2fb30 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
2fb40 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
2fb50 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
2fb60 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
2fb70 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
2fb80 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
2fb90 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2fba0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2fbb0 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
2fbc0 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
2fbd0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2fbe0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
2fbf0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2fc00 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
2fc10 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
2fc20 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
2fc30 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2fc40 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
2fc50 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
2fc60 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
2fc70 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2fc80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2fc90 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2fca0 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
2fcb0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2fcc0 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
2fcd0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2fce0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2fcf0 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2fd00 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2fd10 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
2fd20 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2fd30 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2fd40 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
2fd50 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
2fd60 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
2fd70 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
2fd80 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
2fd90 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
2fda0 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
2fdb0 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
2fdc0 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
2fdd0 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
2fde0 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
2fdf0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
2fe00 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
2fe10 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20   method */.  {. 
2fe20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
2fe30 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
2fe40 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
2fe50 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2fe60 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
2fe70 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20  &pArgc[i+1];.   
2fe80 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61   }..    p->inVta
2fe90 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20  bMethod = 1;.   
2fea0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2feb0 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73  Filter(pVtabCurs
2fec0 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  or, iQuery, pOp-
2fed0 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
2fee0 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  rg);.    p->inVt
2fef0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
2ff00 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2ff10 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2ff20 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
2ff30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2ff40 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2ff50 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
2ff60 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
2ff70 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ff80 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
2ff90 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
2ffa0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2ffb0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
2ffc0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2ffd0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ..  break;.}.#en
2ffe0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2fff0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30000 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
30010 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30020 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30030 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
30040 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
30050 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
30060 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
30070 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30080 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
30090 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
300a0 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
300b0 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
300c0 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
300d0 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
300e0 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
300f0 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
30100 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
30110 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
30120 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30130 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
30140 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
30150 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
30160 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
30170 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
30180 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
30190 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
301a0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
301b0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
301c0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
301d0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
301e0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
301f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
30200 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
30210 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
30220 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
30230 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30240 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
30250 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
30260 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
30270 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
30280 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
30290 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
302a0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
302b0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
302c0 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
302d0 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
302e0 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54  ntext));..  /* T
302f0 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
30300 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
30310 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
30320 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
30330 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e  e current conten
30340 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73  ts to sContext.s
30350 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
30360 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20  user-function . 
30370 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20   ** can use the 
30380 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
30390 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
303a0 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
303b0 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a   .  ** new one..
303c0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
303d0 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74  beMemMove(&sCont
303e0 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20  ext.s, pDest);. 
303f0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
30400 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d  &sContext.s, MEM
30410 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  _Null);..  rc = 
30420 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
30430 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
30440 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
30450 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74  Op->p2);.  sqlit
30460 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
30470 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
30480 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
30490 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
304a0 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
304b0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
304c0 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
304d0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
304e0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
304f0 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
30500 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
30510 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
30520 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
30530 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
30540 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
30550 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
30560 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
30570 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
30580 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
30590 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
305a0 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
305b0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
305c0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
305d0 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
305e0 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
305f0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
30600 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
30610 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
30620 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
30630 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
30640 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
30650 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
30660 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30670 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
30680 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
30690 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
306a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
306b0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
306c0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
306d0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
306e0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
306f0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
30700 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
30710 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
30720 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
30730 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
30740 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
30750 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
30760 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
30770 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
30780 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
30790 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
307a0 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
307b0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
307c0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
307d0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
307e0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
307f0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
30800 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
30810 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
30820 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
30830 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
30840 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
30850 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
30860 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
30870 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
30880 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
30890 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
308a0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
308b0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
308c0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
308d0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
308e0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
308f0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
30900 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
30910 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
30920 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
30930 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
30940 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
30950 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
30960 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
30970 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
30980 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
30990 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
309a0 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
309b0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
309c0 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
309d0 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
309e0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
309f0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
30a00 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
30a10 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
30a20 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
30a30 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
30a40 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
30a50 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30a60 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
30a70 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
30a80 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
30a90 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30aa0 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56   = 0;.  sqlite3V
30ab0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
30ac0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
30ad0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
30ae0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
30af0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
30b00 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30b10 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
30b20 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69  ken(!res,2);.  i
30b30 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
30b40 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
30b50 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
30b60 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
30b70 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  p2 - 1;.  }.  go
30b80 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
30b90 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
30ba0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30bb0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30bc0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30bd0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30be0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
30bf0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
30c00 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
30c10 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
30c20 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
30c30 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
30c40 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
30c50 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
30c60 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
30c70 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
30c80 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
30c90 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
30ca0 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
30cb0 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
30cc0 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
30cd0 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
30ce0 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
30cf0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
30d00 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
30d10 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
30d20 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
30d30 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
30d40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
30d50 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
30d60 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
30d70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
30d80 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
30d90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
30da0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
30db0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
30dc0 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
30dd0 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
30de0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
30df0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
30e00 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
30e10 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
30e20 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
30e30 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
30e40 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
30e50 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
30e60 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
30e70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
30e80 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
30e90 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
30ea0 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
30eb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
30ec0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
30ed0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
30ee0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
30ef0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
30f00 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
30f10 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
30f20 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
30f30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30f40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30f50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30f60 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
30f70 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
30f80 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
30f90 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
30fa0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
30fb0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
30fc0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
30fd0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30fe0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
30ff0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
31000 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
31010 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
31020 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
31030 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
31040 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
31050 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
31060 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
31070 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
31080 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
31090 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
310a0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
310b0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
310c0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
310d0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
310e0 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
310f0 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
31100 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
31110 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
31120 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
31130 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
31140 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
31150 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
31160 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
31170 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
31180 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
31190 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
311a0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
311b0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
311c0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
311d0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
311e0 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
311f0 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
31200 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
31210 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
31220 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
31230 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
31240 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
31250 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
31260 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
31270 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
31280 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
31290 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
312a0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
312b0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
312c0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
312d0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
312e0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
312f0 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
31300 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
31310 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
31320 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
31330 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
31340 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
31350 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
31360 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
31370 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
31380 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
31390 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
313a0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
313b0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
313c0 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
313d0 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
313e0 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
313f0 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
31400 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
31410 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
31420 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
31430 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
31440 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
31450 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
31460 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
31470 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
31480 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
31490 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
314a0 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
314b0 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
314c0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
314d0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
314e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
314f0 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
31500 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
31510 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
31520 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
31530 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
31540 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
31550 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
31560 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
31570 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
31580 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
31590 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
315a0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
315b0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
315c0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
315d0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
315e0 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
315f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31600 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
31610 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
31620 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
31630 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
31640 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
31650 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
31660 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
31670 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
31680 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
31690 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
316a0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
316b0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
316c0 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
316d0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
316e0 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
316f0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
31700 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
31710 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
31720 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
31730 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
31740 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
31750 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
31760 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
31770 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
31780 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
31790 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
317a0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
317b0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
317c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
317d0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
317e0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
317f0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
31800 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
31810 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
31820 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
31830 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
31840 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
31850 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
31860 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
31870 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
31880 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
31890 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
318a0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
318b0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
318c0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
318d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
318e0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
318f0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
31900 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
31910 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
31920 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
31930 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
31940 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
31950 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31960 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31970 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31980 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
31990 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
319a0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
319b0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
319c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
319d0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
319e0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
319f0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
31a00 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
31a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
31a20 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
31a30 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
31a40 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
31a50 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
31a60 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
31a70 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
31a80 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
31a90 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
31aa0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
31ab0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
31ac0 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
31ad0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
31ae0 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
31af0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
31b00 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
31b10 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
31b20 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
31b30 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
31b40 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
31b50 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
31b60 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
31b70 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
31b80 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
31b90 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
31ba0 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
31bb0 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
31bc0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
31bd0 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
31be0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
31bf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
31c00 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
31c10 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
31c20 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ease */.  unsign
31c30 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
31c40 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
31c50 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
31c60 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
31c70 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
31c80 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
31c90 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
31ca0 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
31cb0 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
31cc0 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
31cd0 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
31ce0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
31cf0 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
31d00 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
31d10 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
31d20 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
31d30 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
31d40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
31d50 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
31d60 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74  Synopsis:  Start
31d70 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f   at P2.**.** Pro
31d80 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20  grams contain a 
31d90 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
31da0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  of this opcode a
31db0 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  s the very first
31dc0 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  .** opcode..**.*
31dd0 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
31de0 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
31df0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
31e00 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
31e10 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
31e20 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
31e30 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
31e40 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
31e50 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20  lback..** Or if 
31e60 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65  P4 is blank, use
31e70 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75   the string retu
31e80 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
31e90 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  sql()..**.** If 
31ea0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
31eb0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
31ec0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
31ed0 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20  OP_Init: {      
31ee0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
31ef0 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20   char *zTrace;. 
31f00 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28   char *z;..  if(
31f10 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20   pOp->p2 ){.    
31f20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
31f30 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51  ;.  }.#ifndef SQ
31f40 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
31f50 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
31f60 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67  .   && !p->doing
31f70 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72  Rerun.   && (zTr
31f80 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
31f90 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
31fa0 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
31fb0 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
31fc0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
31fd0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62   zTrace);.    db
31fe0 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
31ff0 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
32000 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
32010 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66  , z);.  }.#ifdef
32020 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
32030 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65  L_TRACE.  zTrace
32040 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
32050 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
32060 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
32070 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ce ){.    int i;
32080 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
32090 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
320a0 20 20 20 20 20 69 66 28 20 4d 41 53 4b 42 49 54       if( MASKBIT
320b0 28 69 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61  (i) & p->btreeMa
320c0 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  sk)==0 ) continu
320d0 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
320e0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
320f0 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
32100 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
32110 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b  _TRACE, zTrace);
32120 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
32130 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f  f /* SQLITE_USE_
32140 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23  FCNTL_TRACE */.#
32150 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
32160 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  UG.  if( (db->fl
32170 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c  ags & SQLITE_Sql
32180 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20  Trace)!=0.   && 
32190 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
321a0 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
321b0 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
321c0 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
321d0 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
321e0 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
321f0 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64  Trace);.  }.#end
32200 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
32210 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  UG */.#endif /* 
32220 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
32230 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  E */.  break;.}.
32240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f  ../* Opcode: Noo
32250 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  p * * * * *.**.*
32260 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54  * Do nothing.  T
32270 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
32280 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20  is often useful 
32290 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73  as a jump.** des
322a0 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a  tination..*/./*.
322b0 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70  ** The magic Exp
322c0 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20  lain opcode are 
322d0 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68  only inserted wh
322e0 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77  en explain==2 (w
322f0 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61  hich.** is to sa
32300 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41  y when the EXPLA
32310 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79  IN QUERY PLAN sy
32320 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a  ntax is used.).*
32330 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  * This opcode re
32340 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  cords informatio
32350 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d  n from the optim
32360 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65  izer.  It is the
32370 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20  .** the same as 
32380 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f  a no-op.  This o
32390 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65  pcodesnever appe
323a0 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d  ars in a real VM
323b0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66   program..*/.def
323c0 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ault: {         
323d0 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c   /* This is real
323e0 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f  ly OP_Noop and O
323f0 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61  P_Explain */.  a
32400 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
32410 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70  de==OP_Noop || p
32420 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
32430 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61  xplain );.  brea
32440 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
32450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32490 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
324a0 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
324b0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
324c0 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
324d0 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
324e0 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
324f0 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
32500 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
32510 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
32520 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
32530 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
32540 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
32550 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
32560 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
32570 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
32580 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
32590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
325a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
325b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
325c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
325d0 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
325e0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
325f0 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
32600 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65  elapsed = sqlite
32610 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72  3Hwtime() - star
32620 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
32630 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b  cles += elapsed;
32640 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b  .      pOp->cnt+
32650 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  +;.    }.#endif.
32660 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
32670 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
32680 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
32690 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
326a0 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
326b0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
326c0 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
326d0 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
326e0 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
326f0 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
32700 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
32710 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
32720 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
32730 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
32740 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
32750 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
32760 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
32770 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
32780 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
32790 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
327a0 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
327b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
327c0 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
327d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
327e0 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
327f0 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70     if( rc!=0 ) p
32800 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c  rintf("rc=%d\n",
32810 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
32820 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f  Op->opflags & (O
32830 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
32840 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29  EASE|OPFLG_OUT2)
32850 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
32860 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70  sterTrace(pOp->p
32870 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
32880 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
32890 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
328a0 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
328b0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
328c0 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33  terTrace(pOp->p3
328d0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
328e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
328f0 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
32900 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
32910 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
32920 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
32930 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
32940 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
32950 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
32960 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
32970 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
32980 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
32990 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
329a0 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
329b0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
329c0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
329d0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
329e0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
329f0 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
32a00 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
32a10 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
32a20 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
32a30 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
32a40 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
32a50 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c               pc,
32a70 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
32a80 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
32a90 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
32aa0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
32ab0 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
32ac0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
32ad0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
32ae0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
32af0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
32b00 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
32b10 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
32b20 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  b, resetSchemaOn
32b30 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20  Fault-1);.  }.. 
32b40 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
32b50 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
32b60 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
32b70 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
32b80 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
32b90 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
32ba0 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
32bb0 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
32bc0 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
32bd0 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  n:.  db->lastRow
32be0 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
32bf0 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53    testcase( nVmS
32c00 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43  tep>0 );.  p->aC
32c10 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
32c20 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
32c30 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65  ] += (int)nVmSte
32c40 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  p;.  sqlite3Vdbe
32c50 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75  Leave(p);.  retu
32c60 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
32c70 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
32c80 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
32c90 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
32ca0 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
32cb0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
32cc0 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
32cd0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
32ce0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
32cf0 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
32d00 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
32d10 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
32d20 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
32d30 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
32d40 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
32d50 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
32d60 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
32d70 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
32d80 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
32d90 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
32da0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
32db0 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
32dc0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
32dd0 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
32de0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
32df0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
32e00 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
32e10 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
32e20 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
32e30 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
32e40 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
32e50 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
32e60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
32e70 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
32e80 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
32e90 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
32ea0 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
32eb0 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
32ec0 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
32ed0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
32ee0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
32ef0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
32f00 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
32f10 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
32f20 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
32f30 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
32f40 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
32f50 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
32f60 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
32f70 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
32f80 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
32f90 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
32fa0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
32fb0 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
32fc0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
32fd0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
32fe0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
32ff0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
33000 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
33010 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
33020 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
33030 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
33040 7d 0a                                            }.