/ Hex Artifact Content
Login

Artifact 2caa3b1e32f3fddc60fecb2cfd66afe2c2eb96b1:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65  3VdbeMemGrow(pMe
1ef0: 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  m, nByte, 0) ){.
1f00: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
1f10: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
1f20: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
1f30: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c  .    memset(pCx,
1f40: 20 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43   0, sizeof(VdbeC
1f50: 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78  ursor));.    pCx
1f60: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
1f70: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
1f80: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69  Field;.    if( i
1f90: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
1fa0: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
1fb0: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
1fc0: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
1fd0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
1fe0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
1ff0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2000: 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  eld];.      sqli
2010: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2020: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2030: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
2040: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
2050: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2060: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
2070: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2080: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
2090: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
20a0: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
20b0: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
20c0: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
20d0: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
20e0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
20f0: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2100: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2110: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2120: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2130: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
2140: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72  **.** If the bTr
2150: 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20  yForInt flag is 
2160: 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61  true, then extra
2170: 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20   effort is made 
2180: 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e  to give.** an in
2190: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
21a0: 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74  tion.  Strings t
21b0: 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c  hat look like fl
21c0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20  oating point.** 
21d0: 76 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68  values but which
21e0: 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f   have no fractio
21f0: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65  nal component (e
2200: 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29  xample: '48.00')
2210: 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20  .** will have a 
2220: 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e  MEM_Int represen
2230: 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79  tation when bTry
2240: 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a  ForInt is true..
2250: 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72  **.** If bTryFor
2260: 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68  Int is false, th
2270: 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  en if the input 
2280: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
2290: 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69  a decimal.** poi
22a0: 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  nt or exponentia
22b0: 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20  l notation, the 
22c0: 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d  result is only M
22d0: 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a  EM_Real, even.**
22e0: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
22f0: 65 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65  exact integer re
2300: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2310: 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f  the quantity..*/
2320: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
2330: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2340: 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74  y(Mem *pRec, int
2350: 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20   bTryForInt){.  
2360: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
2370: 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75   i64 iValue;.  u
2380: 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e  8 enc = pRec->en
2390: 63 3b 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e  c;.  if( (pRec->
23a0: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d  flags&MEM_Str)==
23b0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
23c0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
23d0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
23e0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
23f0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2400: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
2410: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2420: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2430: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2440: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2450: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2460: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2470: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 72 20 3d 20  {.    pRec->r = 
2480: 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  rValue;.    pRec
2490: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
24a0: 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54 72  eal;.    if( bTr
24b0: 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74 65  yForInt ) sqlite
24c0: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
24d0: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a  nity(pRec);.  }.
24e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
24f0: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
2500: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
2510: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
2520: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
2530: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
2540: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2550: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
2560: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
2570: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2580: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2590: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
25a0: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
25b0: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
25c0: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
25d0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
25e0: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
25f0: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
2600: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
2610: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
2620: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
2630: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
2640: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2650: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
2660: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
2670: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2680: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2690: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
26a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
26b0: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
26c0: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
26d0: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
26e0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
26f0: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
2700: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
2710: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
2720: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
2730: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
2740: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2750: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
2760: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
2770: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2780: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2790: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
27a0: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
27b0: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
27c0: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
27d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
27e0: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d    if( affinity>=
27f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2800: 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  IC ){.    assert
2810: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2820: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c  TE_AFF_INTEGER |
2830: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2840: 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20  TE_AFF_REAL.    
2850: 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69           || affi
2860: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2870: 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20  _NUMERIC );.    
2880: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
2890: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
28a0: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  {.      if( (pRe
28b0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
28c0: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
28d0: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
28e0: 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29 3b  ffinity(pRec,1);
28f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2900: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2910: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
2920: 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a  (pRec);.      }.
2930: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
2940: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2950: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2960: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
2970: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
2980: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
2990: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
29a0: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
29b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
29c0: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
29d0: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
29e0: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
29f0: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
2a00: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
2a10: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
2a20: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2a30: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2a40: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2a50: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2a60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
2a70: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c  ngify(pRec, enc,
2a80: 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d   1);.    }.  }.}
2a90: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2aa0: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
2ab0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
2ac0: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
2ad0: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
2ae0: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2af0: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2b00: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2b10: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2b20: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
2b30: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
2b40: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2b50: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
2b60: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
2b70: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2b80: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2b90: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
2ba0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
2bb0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
2bc0: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
2bd0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2be0: 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79  pVal){.  int eTy
2bf0: 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  pe = sqlite3_val
2c00: 75 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20  ue_type(pVal);. 
2c10: 20 69 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49   if( eType==SQLI
2c20: 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d  TE_TEXT ){.    M
2c30: 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a  em *pMem = (Mem*
2c40: 29 70 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79  )pVal;.    apply
2c50: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2c60: 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54  pMem, 0);.    eT
2c70: 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  ype = sqlite3_va
2c80: 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a  lue_type(pVal);.
2c90: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79    }.  return eTy
2ca0: 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70  pe;.}../*.** Exp
2cb0: 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  orted version of
2cc0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
2cd0: 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73  . This one works
2ce0: 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   on sqlite3_valu
2cf0: 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20  e*, .** not the 
2d00: 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79  internal Mem* ty
2d10: 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  pe..*/.void sqli
2d20: 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2d30: 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33  inity(.  sqlite3
2d40: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20  _value *pVal, . 
2d50: 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20   u8 affinity, . 
2d60: 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70   u8 enc.){.  app
2d70: 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20  lyAffinity((Mem 
2d80: 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79  *)pVal, affinity
2d90: 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  , enc);.}../*.**
2da0: 20 70 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20   pMem currently 
2db0: 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72  only holds a str
2dc0: 69 6e 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79  ing type (or may
2dd0: 62 65 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77  be a BLOB that w
2de0: 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72  e can.** interpr
2df0: 65 74 20 61 73 20 61 20 73 74 72 69 6e 67 20 69  et as a string i
2e00: 66 20 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20  f we want to).  
2e10: 43 6f 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72  Compute its corr
2e20: 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d  esponding.** num
2e30: 65 72 69 63 20 74 79 70 65 2c 20 69 66 20 68 61  eric type, if ha
2e40: 73 20 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20  s one.  Set the 
2e50: 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d 65 6d  pMem->r and pMem
2e60: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
2e70: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
2e80: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
2e90: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
2ea0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
2eb0: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
2ec0: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
2ed0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
2ee0: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
2ef0: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
2f00: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2f10: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
2f20: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
2f30: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
2f40: 2d 3e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d  ->r, pMem->n, pM
2f50: 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20  em->enc)==0 ){. 
2f60: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
2f70: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74  .  if( sqlite3At
2f80: 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70  oi64(pMem->z, &p
2f90: 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e  Mem->u.i, pMem->
2fa0: 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53  n, pMem->enc)==S
2fb0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2fc0: 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a  return MEM_Int;.
2fd0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d    }.  return MEM
2fe0: 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  _Real;.}../*.** 
2ff0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72  Return the numer
3000: 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65 6d  ic type for pMem
3010: 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74  , either MEM_Int
3020: 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20   or MEM_Real or 
3030: 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e  both or.** none.
3040: 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20    .**.** Unlike 
3050: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3060: 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f 75  nity(), this rou
3070: 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  tine does not mo
3080: 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  dify pMem->flags
3090: 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65 73  ..** But it does
30a0: 20 73 65 74 20 70 4d 65 6d 2d 3e 72 20 61 6e 64   set pMem->r and
30b0: 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f   pMem->u.i appro
30c0: 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61  priately..*/.sta
30d0: 74 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54  tic u16 numericT
30e0: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
30f0: 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67    if( pMem->flag
3100: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
3110: 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65  _Real) ){.    re
3120: 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  turn pMem->flags
3130: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3140: 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28  Real);.  }.  if(
3150: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3160: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
3170: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3180: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
3190: 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20  pe(pMem);.  }.  
31a0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66  return 0;.}..#if
31b0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
31c0: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e  ./*.** Write a n
31d0: 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  ice string repre
31e0: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
31f0: 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c   contents of cel
3200: 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62  l pMem.** into b
3210: 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67  uffer zBuf, leng
3220: 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64  th nBuf..*/.void
3230: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
3240: 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a  rettyPrint(Mem *
3250: 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66  pMem, char *zBuf
3260: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20  ){.  char *zCsr 
3270: 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20  = zBuf;.  int f 
3280: 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a  = pMem->flags;..
3290: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
32a0: 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61  har *const encna
32b0: 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20  mes[] = {"(X)", 
32c0: 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c  "(8)", "(16LE)",
32d0: 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69   "(16BE)"};..  i
32e0: 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b  f( f&MEM_Blob ){
32f0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
3300: 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20  char c;.    if( 
3310: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
3320: 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20       c = 'z';.  
3330: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3340: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3350: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3360: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3370: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3380: 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20       c = 't';.  
3390: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
33a0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
33b0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
33c0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
33d0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
33e0: 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20   c = 'e';.      
33f0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3400: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
3410: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3420: 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73  se{.      c = 's
3430: 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  ';.    }..    sq
3440: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3450: 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20  00, zCsr, "%c", 
3460: 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  c);.    zCsr += 
3470: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3480: 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCsr);.    sqlit
3490: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
34a0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
34b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
34c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
34d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
34e0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
34f0: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3510: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3520: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3530: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3540: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3550: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3560: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3570: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3580: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3590: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
35a0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
35b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
35c0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
35d0: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
35e0: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
35f0: 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  z;.    }..    sq
3600: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3610: 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c  00, zCsr, "]%s",
3620: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3630: 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20  enc]);.    zCsr 
3640: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3650: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66  30(zCsr);.    if
3660: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
3670: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3680: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3690: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
36a0: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
36b0: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
36c0: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
36d0: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
36e0: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
36f0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3700: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3710: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3720: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
3730: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3740: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
3750: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3760: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3770: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3780: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3790: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
37a0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
37b0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
37c0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
37d0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
37e0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
37f0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3800: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3810: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3820: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3830: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3840: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3850: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3860: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3870: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3880: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3890: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
38a0: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
38b0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
38c0: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
38d0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
38e0: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
38f0: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3900: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3910: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3920: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3930: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3940: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3950: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3960: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3970: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3980: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3990: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
39a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
39b0: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
39c0: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
39d0: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
39e0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
39f0: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3a00: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3a10: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3a20: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3a30: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3a40: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3a50: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3a60: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3a70: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3a80: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3a90: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3aa0: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3ab0: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3ac0: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3ad0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3ae0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3af0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3b00: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3b10: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3b20: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3b30: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3b40: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69  _Str) ){.    pri
3b50: 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ntf(" si:%lld", 
3b60: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3b70: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b80: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
3b90: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
3ba0: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
3bb0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
3bc0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
3bd0: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3be0: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
3bf0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
3c00: 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69  g", p->r);.#endi
3c10: 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  f.  }else if( p-
3c20: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
3c30: 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Set ){.    print
3c40: 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a  f(" (rowset)");.
3c50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61    }else{.    cha
3c60: 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20  r zBuf[200];.   
3c70: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50   sqlite3VdbeMemP
3c80: 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42  rettyPrint(p, zB
3c90: 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  uf);.    printf(
3ca0: 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20  " %s", zBuf);.  
3cb0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
3cc0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
3cd0: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
3ce0: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
3cf0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3d00: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
3d10: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
3d20: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  );.}.#endif..#if
3d30: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
3d40: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
3d50: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69  TER_TRACE(R,M) i
3d60: 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  f(db->flags&SQLI
3d70: 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65 67  TE_VdbeTrace)reg
3d80: 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29 0a  isterTrace(R,M).
3d90: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
3da0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3db0: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ,M).#endif...#if
3dc0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
3dd0: 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e  ../* .** hwtime.
3de0: 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e  h contains inlin
3df0: 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65  e assembler code
3e00: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e   for implementin
3e10: 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f  g .** high-perfo
3e20: 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f  rmance timing ro
3e30: 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c  utines..*/.#incl
3e40: 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a  ude "hwtime.h"..
3e50: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
3e60: 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69  NDEBUG./*.** Thi
3e70: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e  s function is on
3e80: 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  ly called from w
3e90: 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28  ithin an assert(
3ea0: 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74  ) expression. It
3eb0: 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20  .** checks that 
3ec0: 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61  the sqlite3.nTra
3ed0: 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c  nsaction variabl
3ee0: 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73  e is correctly s
3ef0: 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d  et to.** the num
3f00: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
3f10: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
3f20: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  s currently in t
3f30: 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69  he .** linked li
3f40: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20 73  st starting at s
3f50: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
3f60: 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a  t..** .** Usage:
3f70: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
3f80: 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
3f90: 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f  tCount(db) );.*/
3fa0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63  .static int chec
3fb0: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
3fc0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
3fd0: 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76  int n = 0;.  Sav
3fe0: 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72  epoint *p;.  for
3ff0: 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  (p=db->pSavepoin
4000: 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74  t; p; p=p->pNext
4010: 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  ) n++;.  assert(
4020: 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f   n==(db->nSavepo
4030: 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e  int + db->isTran
4040: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
4050: 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  ) );.  return 1;
4060: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
4070: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4080: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4090: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a  ram as we can..*
40a0: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
40b0: 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74  re of sqlite3_st
40c0: 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73  ep().  .*/.int s
40d0: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a  qlite3VdbeExec(.
40e0: 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20    Vdbe *p       
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4100: 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20  The VDBE */.){. 
4110: 20 69 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20   int pc=0;      
4120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4130: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
4140: 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20  er */.  Op *aOp 
4150: 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20  = p->aOp;       
4160: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
4170: 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  >aOp */.  Op *pO
4180: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
4190: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
41a0: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  operation */.  i
41b0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
41c0: 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  K;        /* Val
41d0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a  ue to return */.
41e0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
41f0: 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20  p->db;       /* 
4200: 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  The database */.
4210: 20 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61    u8 resetSchema
4220: 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20  OnFault = 0; /* 
4230: 52 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74  Reset schema aft
4240: 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70  er an error if p
4250: 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20  ositive */.  u8 
4260: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
4270: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
4280: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
4290: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61   */.  int iCompa
42a0: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
42b0: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
42c0: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
42d0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73  eration */.  uns
42e0: 69 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20  igned nVmStep = 
42f0: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  0;      /* Numbe
4300: 72 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  r of virtual mac
4310: 68 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69  hine steps */.#i
4320: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4330: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4340: 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e  ACK.  unsigned n
4350: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4360: 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f  0;/* Invoke xPro
4370: 67 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d  gress() when nVm
4380: 53 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69  Step reaches thi
4390: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65  s */.#endif.  Me
43a0: 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65  m *aMem = p->aMe
43b0: 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79  m;       /* Copy
43c0: 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20   of p->aMem */. 
43d0: 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20   Mem *pIn1 = 0; 
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
43f0: 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  st input operand
4400: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20   */.  Mem *pIn2 
4410: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4420: 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70   /* 2nd input op
4430: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4440: 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn3 = 0;       
4450: 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70        /* 3rd inp
4460: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4470: 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20  Mem *pOut = 0;  
4480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
4490: 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  tput operand */.
44a0: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
44b0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
44c0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63  Permutation of c
44d0: 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f  olumns for OP_Co
44e0: 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c  mpare */.  i64 l
44f0: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
4500: 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61  astRowid;  /* Sa
4510: 76 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ved value of the
4520: 20 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57   last insert ROW
4530: 49 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42  ID */.#ifdef VDB
4540: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20  E_PROFILE.  u64 
4550: 73 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  start;          
4560: 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c         /* CPU cl
4570: 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61  ock count at sta
4580: 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a  rt of opcode */.
4590: 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e  #endif.  /*** IN
45a0: 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e  SERT STACK UNION
45b0: 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73   HERE ***/..  as
45c0: 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d  sert( p->magic==
45d0: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29  VDBE_MAGIC_RUN )
45e0: 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74  ;  /* sqlite3_st
45f0: 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68  ep() verifies th
4600: 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  is */.  sqlite3V
4610: 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69  dbeEnter(p);.  i
4620: 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
4630: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a  _NOMEM ){.    /*
4640: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
4650: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69   a malloc() insi
4660: 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  de a call to sql
4670: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4680: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
4690: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
46a0: 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f  16() failed.  */
46b0: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
46c0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
46d0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
46e0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
46f0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
4700: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
4710: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
4720: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
4730: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
4740: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
4750: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4760: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4770: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4780: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4790: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
47a0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
47b0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
47c0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
47d0: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
47e0: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
47f0: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
4800: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4810: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
4820: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4830: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  {.    assert( 0 
4840: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
4850: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
4860: 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69  essLimit = (unsi
4870: 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72  gned)p->aCounter
4880: 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
4890: 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20  US_VM_STEP];.   
48a0: 20 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69   if( nProgressLi
48b0: 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit==0 ){.      
48c0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
48d0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
48e0: 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
48f0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4900: 69 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29  it %= (unsigned)
4910: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4920: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
4930: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4940: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4950: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4960: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4970: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4980: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
4990: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
49a0: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
49b0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
49c0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
49d0: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
49e0: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
49f0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4a00: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4a10: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4a20: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
4a30: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4a40: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
4a50: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
4a60: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4a70: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
4a80: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4a90: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
4aa0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
4ab0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4ac0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4ad0: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
4ae0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4af0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4b00: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
4b10: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
4b20: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
4b30: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
4b40: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
4b50: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
4b60: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
4b70: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
4b80: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
4b90: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
4ba0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
4bb0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
4bc0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
4bd0: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
4be0: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
4bf0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
4c00: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4c10: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4c20: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4c30: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4c40: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4c50: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4c60: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4c70: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4c80: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4c90: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74  E_PROFILE.    st
4ca0: 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74  art = sqlite3Hwt
4cb0: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
4cc0: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20    nVmStep++;.   
4cd0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b   pOp = &aOp[pc];
4ce0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
4cf0: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
4d00: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
4d10: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
4d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4d30: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
4d40: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4d50: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
4d60: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4d70: 74 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20  tOp(stdout, pc, 
4d80: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
4d90: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4da0: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4db0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4dc0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4dd0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4de0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4df0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4e00: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
4e10: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4e20: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
4e30: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4e40: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
4e50: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4e60: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
4e70: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4e80: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4e90: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
4ea0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4eb0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
4ec0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
4ed0: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
4ee0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
4ef0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
4f00: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
4f10: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
4f20: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
4f30: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
4f40: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
4f50: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
4f60: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
4f70: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
4f80: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
4f90: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
4fa0: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
4fb0: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
4fc0: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
4fd0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
4fe0: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
4ff0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
5000: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
5010: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5020: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5030: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5040: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5050: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5060: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5070: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5080: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  or) );.      pOu
5090: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
50a0: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
50b0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
50c0: 75 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56  ut);.      if( V
50d0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
50e0: 75 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62  ut) ) sqlite3Vdb
50f0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
5100: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
5110: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
5120: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61      }..    /* Sa
5130: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
5140: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
5150: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5160: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
5170: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5180: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
5190: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
51a0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
51b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
51c0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
51d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
51e0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
51f0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
5200: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
5210: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5220: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5230: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
5240: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5250: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5260: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5270: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5280: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5290: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
52a0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
52b0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
52c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
52d0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
52e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
52f0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5300: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5310: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p2]) );.      a
5320: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5330: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5340: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5350: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
5360: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5370: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5380: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5390: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
53a0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
53b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
53c0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
53d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
53e0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
53f0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5410: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5420: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5430: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5440: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5450: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5460: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5470: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5480: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5490: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
54a0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
54b0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
54c0: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
54d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
54e0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
54f0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
5500: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5510: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5520: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5530: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5540: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5550: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5560: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5570: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5580: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5590: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
55a0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
55b0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
55c0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
55d0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
55e0: 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
55f0: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
5600: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
5610: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5620: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
5660: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
5670: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
5680: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
5690: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
56a0: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
56b0: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
56c0: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
56d0: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
56e0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
56f0: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
5700: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
5710: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5720: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5730: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
5740: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
5750: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
5760: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
5770: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
5780: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
5790: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
57a0: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
57b0: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
57c0: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
57d0: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
57e0: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
57f0: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
5800: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
5810: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5820: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5830: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
5840: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
5850: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
5860: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
5870: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
5880: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
5890: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
58a0: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
58b0: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
58c0: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
58d0: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
58e0: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
58f0: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
5900: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
5910: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5920: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5930: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5940: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5950: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5960: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5970: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5980: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5990: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
59a0: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
59b0: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
59c0: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
59d0: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
59e0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
59f0: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5a00: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5a10: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5a20: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5a30: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5a40: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5a50: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5a60: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5a70: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5a80: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5a90: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5aa0: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5ab0: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5ac0: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5ad0: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5ae0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5af0: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5b00: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5b10: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5b20: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5b30: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5b40: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5b50: 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75  2_prerelease, ou
5b60: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
5b70: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
5b80: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
5b90: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5ba0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
5bb0: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
5bc0: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
5bd0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
5be0: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
5bf0: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
5c00: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
5c10: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
5c20: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
5c30: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
5c40: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
5c50: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
5c60: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
5c70: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
5c80: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
5c90: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
5ca0: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
5cb0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
5cc0: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
5cd0: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
5ce0: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
5cf0: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
5d00: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
5d10: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
5d20: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
5d30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d70: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
5d80: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
5d90: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
5da0: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
5db0: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
5dc0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5dd0: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
5de0: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
5df0: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
5e00: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
5e10: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
5e20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
5e30: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
5e40: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
5e50: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
5e60: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
5e70: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
5e80: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
5e90: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
5ea0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
5eb0: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
5ec0: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
5ed0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
5ee0: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
5ef0: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
5f00: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
5f10: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
5f20: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
5f30: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
5f40: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
5f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
5f60: 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70  mp */.  pc = pOp
5f70: 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20  ->p2 - 1;..  /* 
5f80: 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65  Opcodes that are
5f90: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74   used as the bot
5fa0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f  tom of a loop (O
5fb0: 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c  P_Next, OP_Prev,
5fc0: 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20  .  ** OP_VNext, 
5fd0: 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f  OP_RowSetNext, o
5fe0: 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29  r OP_SorterNext)
5ff0: 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75   all jump here u
6000: 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74  pon.  ** complet
6010: 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73  ion.  Check to s
6020: 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ee if sqlite3_in
6030: 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65  terrupt() has be
6040: 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f  en called.  ** o
6050: 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73  r if the progres
6060: 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73  s callback needs
6070: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20   to be invoked. 
6080: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20  .  **.  ** This 
6090: 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75  code uses unstru
60a0: 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74  ctured "goto" st
60b0: 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65  atements and doe
60c0: 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e  s not look clean
60d0: 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20  ..  ** But that 
60e0: 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c  is not due to sl
60f0: 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69  oppy coding habi
6100: 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20  ts. The code is 
6110: 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a  written this.  *
6120: 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72  * way for perfor
6130: 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20  mance, to avoid 
6140: 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68  having to run th
6150: 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20  e interrupt and 
6160: 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68  progress.  ** ch
6170: 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70  ecks on every op
6180: 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70  code.  This help
6190: 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  s sqlite3_step()
61a0: 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e   to run about 1.
61b0: 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61  5%.  ** faster a
61c0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c  ccording to "val
61d0: 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63  grind --tool=cac
61e0: 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63  hegrind" */.chec
61f0: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
6200: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
6210: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
6220: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6230: 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64  interrupt;.#ifnd
6240: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
6250: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
6260: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
6270: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6280: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
6290: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
62a0: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
62b0: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
62c0: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
62d0: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
62e0: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
62f0: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
6300: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
6310: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6320: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6330: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
6340: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
6350: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
6360: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
6370: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
6380: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
6390: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
63a0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
63b0: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
63c0: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
63d0: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
63e0: 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65  imit ){.    asse
63f0: 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  rt( db->nProgres
6400: 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e  sOps!=0 );.    n
6410: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
6420: 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50  nVmStep + db->nP
6430: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56  rogressOps - (nV
6440: 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72  mStep%db->nProgr
6450: 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28  essOps);.    if(
6460: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
6470: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
6480: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
6490: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
64a0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
64b0: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
64c0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
64d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
64e0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
64f0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6500: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6510: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6520: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6530: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6540: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6550: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6570: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6580: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6590: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
65a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
65b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
65c0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
65d0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
65e0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
65f0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6600: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6610: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6620: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6630: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6640: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6650: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  n1);.  pc = pOp-
6660: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6670: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6680: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
6690: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
66a0: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
66b0: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
66c0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
66d0: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
66e0: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
66f0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6700: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
6710: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6720: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6730: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6740: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6750: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6760: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
6770: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6780: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  >u.i;.  pIn1->fl
6790: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
67a0: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
67b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
67c0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20  Coroutine P1 P2 
67d0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  P3 * *.**.** Set
67e0: 20 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20   up register P1 
67f0: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
6800: 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72  Yield to the cor
6810: 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65  outine.** locate
6820: 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e  d at address P3.
6830: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20  .**.** If P2!=0 
6840: 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69  then the corouti
6850: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ne implementatio
6860: 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  n immediately fo
6870: 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70  llows.** this op
6880: 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f  code.  So jump o
6890: 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  ver the coroutin
68a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
68b0: 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50   to.** address P
68c0: 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
68d0: 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a  o: EndCoroutine.
68e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43  */.case OP_InitC
68f0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
6900: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
6910: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6920: 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  &  pOp->p1<=(p->
6930: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6940: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6950: 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p2>=0 && pOp-
6960: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6970: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6980: 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d  =0 && pOp->p3<p-
6990: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d  >nOp );.  pOut =
69a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
69b0: 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65  .  assert( !Vdbe
69c0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
69d0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
69e0: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
69f0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
6a00: 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f  EM_Int;.  if( pO
6a10: 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70  p->p2 ) pc = pOp
6a20: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6a30: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6a40: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6a50: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6a60: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6a70: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6a80: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6a90: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6aa0: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6ab0: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6ac0: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6ad0: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6ae0: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6af0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6b00: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6b10: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6b20: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6b30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6b40: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6b50: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
6b60: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6b70: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6b80: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6ba0: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
6bb0: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
6bc0: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
6bd0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
6be0: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
6bf0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
6c00: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
6c10: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
6c20: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
6c30: 4f 70 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61  Op );.  pc = pCa
6c40: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20  ller->p2 - 1;.  
6c50: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6c60: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6c70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6c80: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32  de:  Yield P1 P2
6c90: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6ca0: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6cb0: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6cc0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6cd0: 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61   P1.  This.** ha
6ce0: 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  s the effect of 
6cf0: 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f  yielding to a co
6d00: 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  routine..**.** I
6d10: 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  f the coroutine 
6d20: 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64  that is launched
6d30: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
6d40: 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a  tion ends with.*
6d50: 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72  * Yield or Retur
6d60: 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20  n then continue 
6d70: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
6d80: 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
6d90: 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  .** the coroutin
6da0: 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68  e launched by th
6db0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  is instruction e
6dc0: 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43  nds with.** EndC
6dd0: 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a  oroutine, then j
6de0: 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72  ump to P2 rather
6df0: 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67   than continuing
6e00: 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78   with the.** nex
6e10: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
6e20: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6e30: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6e40: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
6e60: 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e  n1, jump */.  in
6e70: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
6e80: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6e90: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6ea0: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6eb0: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6ec0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6ed0: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6ee0: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6ef0: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6f00: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6f10: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6f20: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
6f30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6f40: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
6f50: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
6f60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
6f70: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
6f80: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
6f90: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6fa0: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
6fb0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
6fc0: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
6fd0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
6fe0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
6ff0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
7000: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
7010: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7020: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7030: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7040: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7050: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
7060: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
7070: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
7080: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
7090: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
70a0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
70b0: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
70c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
70d0: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
70e0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
70f0: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
7100: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7110: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7120: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7130: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7140: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7150: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
7160: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
7170: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
7180: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
7190: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
71a0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
71b0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
71c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
71d0: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
71e0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
71f0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
7200: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
7210: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7220: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7230: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7240: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7250: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
7260: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
7270: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
7280: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
7290: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
72a0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
72b0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
72c0: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
72d0: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
72e0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
72f0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
7300: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
7310: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7320: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7330: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7340: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7350: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
7360: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
7370: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
7380: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
7390: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
73a0: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
73b0: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
73c0: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
73d0: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
73e0: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
73f0: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
7400: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
7410: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7420: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7430: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7440: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7450: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
7460: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7470: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
7480: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
7490: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
74a0: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
74b0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
74c0: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
74d0: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
74e0: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
74f0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
7500: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
7510: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7520: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7530: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7540: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7550: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
7560: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
7570: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7580: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
7590: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
75a0: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
75b0: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
75c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
75d0: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
75e0: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66   *zLogFmt;..  if
75f0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
7600: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
7610: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7620: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7630: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7640: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7650: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
7660: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
7670: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7680: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7690: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
76a0: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
76b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
76c0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
76d0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
76e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
76f0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
7700: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
7710: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7720: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7730: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
7740: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
7750: 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f  tion pc is the O
7760: 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69  P_Program that i
7770: 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70  nvoked the sub-p
7780: 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a  rogram .      **
7790: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
77a0: 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20   halted. If the 
77b0: 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  p2 instruction o
77c0: 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20  f this OP_Halt. 
77d0: 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74       ** instruct
77e0: 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45  ion is set to OE
77f0: 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68  _Ignore, then th
7800: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  e sub-program is
7810: 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20   throwing.      
7820: 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63  ** an IGNORE exc
7830: 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20  eption. In this 
7840: 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65  case jump to the
7850: 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69   address specifi
7860: 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74  ed.      ** as t
7870: 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c  he p2 of the cal
7880: 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e  ling OP_Program.
7890: 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20    */.      pc = 
78a0: 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b  p->aOp[pc].p2-1;
78b0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
78c0: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
78d0: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
78e0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d   break;.  }.  p-
78f0: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
7900: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
7910: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
7920: 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69   p->pc = pc;.  i
7930: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7940: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
7950: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
7960: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
7970: 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54  zType[] = { "NOT
7980: 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22   NULL", "UNIQUE"
7990: 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20  , "CHECK",.     
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e          "FOREIGN
79d0: 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61   KEY" };.      a
79e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d  ssert( pOp->p5>=
79f0: 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  1 && pOp->p5<=4 
7a00: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7a10: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
7a20: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7a30: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
7a40: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7a50: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
7a60: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7a70: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
7a80: 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b   zType = azType[
7a90: 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20  pOp->p5-1];.    
7aa0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79  }else{.      zTy
7ab0: 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  pe = 0;.    }.  
7ac0: 20 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21    assert( zType!
7ad0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21  =0 || pOp->p4.z!
7ae0: 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d  =0 );.    zLogFm
7af0: 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64  t = "abort at %d
7b00: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20   in [%s]: %s";. 
7b10: 20 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20     if( zType && 
7b20: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
7b30: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
7b40: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
7b50: 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61   db, "%s constra
7b60: 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c  int failed: %s",
7b70: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7b80: 20 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20           zType, 
7b90: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7ba0: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
7bb0: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7bc0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
7bd0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
7be0: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
7bf0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7c00: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7c10: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7c20: 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  db, "%s constrai
7c30: 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70  nt failed", zTyp
7c40: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  e);.    }.    sq
7c50: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
7c60: 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20  1, zLogFmt, pc, 
7c70: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
7c80: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
7c90: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
7ca0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
7cb0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
7cc0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
7cd0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
7ce0: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
7cf0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
7d00: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
7d10: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
7d20: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
7d30: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7d40: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
7d50: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7d60: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7d70: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7d80: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7d90: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
7da0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
7db0: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
7dc0: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
7dd0: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
7de0: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
7df0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
7e00: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
7e10: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
7e20: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
7e30: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
7e40: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7e50: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
7e60: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7e70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7e80: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7e90: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7ea0: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7eb0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7ec0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7ed0: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7ee0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
7ef0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
7f00: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7f10: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
7f20: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
7f30: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7f40: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7f50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
7f60: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
7f70: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7f80: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7f90: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
7fa0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
7fb0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
7fc0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
7fd0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7fe0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
7ff0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
8000: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8010: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8020: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8030: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8040: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
8050: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
8060: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8070: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8080: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
8090: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
80a0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
80b0: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
80c0: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
80d0: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
80e0: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
80f0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
8100: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
8110: 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  ->r = *pOp->p4.p
8120: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8130: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8140: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8150: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8160: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8170: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8180: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8190: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
81a0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
81b0: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
81c0: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 62   into a String b
81d0: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
81e0: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
81f0: 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67  st time.  During
8200: 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f  .** this transfo
8210: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e  rmation, the len
8220: 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34  gth of string P4
8230: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64   is computed and
8240: 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68   stored.** as th
8250: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a  e P1 parameter..
8260: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8270: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
8280: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
8290: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
82a0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
82b0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
82c0: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
82d0: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
82e0: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
82f0: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
8300: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
8310: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
8320: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
8330: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
8340: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
8350: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
8360: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
8370: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
8380: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8390: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
83a0: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
83b0: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
83c0: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
83d0: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
83e0: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
83f0: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
8400: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
8410: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
8420: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
8430: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
8440: 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b  amic(pOut)==0 );
8450: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
8460: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
8470: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
8480: 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70  tatic;.    if( p
8490: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
84a0: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
84b0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
84c0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
84d0: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
84e0: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
84f0: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
8500: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
8510: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
8520: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
8530: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
8540: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
8550: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
8560: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8570: 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
8580: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8590: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
85a0: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
85b0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
85c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
85d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
85e0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
85f0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
8600: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
8610: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
8620: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
8630: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
8640: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
8650: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
8660: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
8670: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8680: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8690: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
86a0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
86b0: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
86c0: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
86d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
86e0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
86f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8700: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8710: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8720: 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32  code: Null P1 P2
8730: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
8740: 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d  sis:  r[P2..P3]=
8750: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  NULL.**.** Write
8760: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
8770: 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50  isters P2.  If P
8780: 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50  3 greater than P
8790: 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69  2, then also wri
87a0: 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20  te.** NULL into 
87b0: 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
87c0: 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69  every register i
87d0: 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64  n between P2 and
87e0: 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69   P3.  If P3.** i
87f0: 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28  s less than P2 (
8800: 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20  typically P3 is 
8810: 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20  zero) then only 
8820: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a  register P2 is.*
8830: 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  * set to NULL..*
8840: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76  *.** If the P1 v
8850: 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
8860: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20  , then also set 
8870: 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20  the MEM_Cleared 
8880: 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20  flag so that.** 
8890: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c  NULL values will
88a0: 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75   not compare equ
88b0: 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54  al even if SQLIT
88c0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
88d0: 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f  on.** OP_Ne or O
88e0: 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  P_Eq..*/.case OP
88f0: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
8900: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8910: 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63  lease */.  int c
8920: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
8930: 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d  ag;.  cnt = pOp-
8940: 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  >p3-pOp->p2;.  a
8950: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8960: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8970: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
8980: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
8990: 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45   = pOp->p1 ? (ME
89a0: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72  M_Null|MEM_Clear
89b0: 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ed) : MEM_Null;.
89c0: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
89d0: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
89e0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
89f0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8a00: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8a10: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
8a20: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8a30: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e  nullFlag;.    cn
8a40: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
8a50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8a60: 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20  SoftNull P1 * * 
8a70: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8a80: 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a    r[P1]=NULL.**.
8a90: 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20  ** Set register 
8aa0: 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  P1 to have the v
8ab0: 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65  alue NULL as see
8ac0: 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65  n by the OP_Make
8ad0: 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75  Record.** instru
8ae0: 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f  ction, but do no
8af0: 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e  t free any strin
8b00: 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79  g or blob memory
8b10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8b20: 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72  .** the register
8b30: 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  , so that if the
8b40: 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72   value was a str
8b50: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74  ing or blob that
8b60: 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
8b70: 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20  ly copied using 
8b80: 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f  OP_SCopy, the co
8b90: 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  pies will contin
8ba0: 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a  ue to be valid..
8bb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e  */.case OP_SoftN
8bc0: 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ull: {.  assert(
8bd0: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
8be0: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
8bf0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
8c00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8c10: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
8c20: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
8c30: 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e  lags|MEM_Null)&~
8c40: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
8c50: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8c60: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
8c70: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8c80: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
8c90: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
8ca0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
8cb0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
8cc0: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
8cd0: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
8ce0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
8cf0: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8d10: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8d20: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8d30: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
8d40: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
8d50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8d60: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8d70: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
8d80: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
8d90: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8da0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8db0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8dc0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8dd0: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
8de0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8df0: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
8e00: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
8e10: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
8e20: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
8e30: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
8e40: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
8e50: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
8e60: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
8e70: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
8e80: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
8e90: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
8ea0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
8eb0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
8ec0: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
8ed0: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
8ee0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8ef0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
8f00: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
8f10: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
8f20: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
8f30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8f40: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
8f50: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
8f60: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
8f70: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
8f80: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
8f90: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
8fa0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
8fb0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
8fc0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
8fd0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
8fe0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9000: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9010: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
9020: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
9030: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9040: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9050: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
9060: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9070: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33  nopsis:  r[P2@P3
9080: 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a  ]=r[P1@P3].**.**
9090: 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c   Move the P3 val
90a0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
90b0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72  P1..P1+P3-1 over
90c0: 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
90d0: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20  rs P2..P2+P3-1. 
90e0: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
90f0: 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65  1+P3-1 are.** le
9100: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
9110: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
9120: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
9130: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
9140: 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32  +P3-1 and P2..P2
9150: 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70  +P3-1 to overlap
9160: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
9170: 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62  r.** for P3 to b
9180: 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a  e less than 1..*
9190: 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20  /.case OP_Move: 
91a0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f  {.  char *zMallo
91b0: 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20  c;   /* Holding 
91c0: 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c  variable for all
91d0: 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f  ocated memory */
91e0: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
91f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9200: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
9210: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
9220: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
9230: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
9240: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
9250: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
9260: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9270: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
9280: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
9290: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
92a0: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
92b0: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
92c0: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
92d0: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
92e0: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
92f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
9300: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
9310: 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
9320: 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d  ert( pOut<=&aMem
9330: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
9340: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9350: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9360: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
9370: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
9380: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
9390: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
93a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
93b0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
93c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
93d0: 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 7a  ase(pOut);.    z
93e0: 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a  Malloc = pOut->z
93f0: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 6d 65 6d 63  Malloc;.    memc
9400: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 73  py(pOut, pIn1, s
9410: 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 23 69 66  izeof(Mem));.#if
9420: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9430: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9440: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9450: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9460: 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70  copyFrom<&aMem[p
9470: 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20  1+pOp->p3] ){.  
9480: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9490: 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70  From += p1 - pOp
94a0: 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ->p2;.    }.#end
94b0: 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  if.    pIn1->fla
94c0: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
94d0: 65 64 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  ed;.    pIn1->zM
94e0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
94f0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9500: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
9510: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
9520: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pOut++;.  }whil
9530: 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61  e( --n );.  brea
9540: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9550: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
9560: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9570: 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40  r[P2@P3+1]=r[P1@
9580: 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  P3+1].**.** Make
9590: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
95a0: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
95b0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
95c0: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
95d0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
95e0: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
95f0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9600: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
9610: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
9620: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
9630: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
9640: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
9650: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
9660: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
9670: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
9680: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9690: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
96a0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
96b0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
96c0: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
96d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
96e0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
96f0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
9700: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
9710: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
9720: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9730: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
9740: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
9750: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
9760: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
9770: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
9780: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
9790: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
97a0: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
97b0: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
97c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
97d0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
97e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
97f0: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
9800: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
9810: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
9820: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9830: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
9840: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
9850: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
9860: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
9870: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
9880: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
9890: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
98a0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
98b0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
98c0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
98d0: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
98e0: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
98f0: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
9900: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
9910: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
9920: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
9930: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
9940: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
9950: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
9960: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
9970: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
9980: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
9990: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
99a0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
99b0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
99c0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
99d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
99e0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
99f0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
9a00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9a10: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9a20: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9a30: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9a40: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
9a50: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9a60: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9a70: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
9a80: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9a90: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
9aa0: 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e  From==0 ) pOut->
9ab0: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
9ac0: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  1;.#endif.  brea
9ad0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9ae0: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
9af0: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9b00: 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31  is:  output=r[P1
9b10: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
9b20: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
9b30: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
9b40: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
9b50: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
9b60: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
9b70: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
9b80: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
9b90: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
9ba0: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
9bb0: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
9bc0: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
9bd0: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
9be0: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
9bf0: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
9c00: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
9c10: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
9c20: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
9c30: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
9c40: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
9c50: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
9c60: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
9c70: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
9c80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9c90: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
9ca0: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
9cb0: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
9cc0: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
9cd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9ce0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
9cf0: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
9d00: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
9d10: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
9d20: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
9d30: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
9d40: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
9d50: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
9d60: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
9d70: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
9d80: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
9d90: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
9da0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
9db0: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
9dc0: 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  halt;.  }.#endif
9dd0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
9de0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
9df0: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
9e00: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
9e10: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
9e20: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
9e30: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
9e40: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
9e50: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
9e60: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
9e70: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
9e80: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
9e90: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
9ea0: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
9eb0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
9ec0: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
9ed0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
9ee0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
9ef0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
9f00: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
9f10: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
9f20: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9f30: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
9f40: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
9f50: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
9f60: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
9f70: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
9f80: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
9f90: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
9fa0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9fb0: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
9fc0: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
9fd0: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
9fe0: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
9ff0: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
a000: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
a010: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
a020: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
a030: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
a040: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
a050: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
a060: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
a070: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
a080: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
a090: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
a0a0: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
a0b0: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
a0c0: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
a0d0: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
a0e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
a0f0: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
a100: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
a110: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
a120: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
a130: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
a140: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
a150: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
a160: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
a170: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
a180: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
a190: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
a1a0: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
a1b0: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
a1c0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a1d0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
a1e0: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
a1f0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
a200: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
a210: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
a220: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
a230: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
a240: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
a250: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
a260: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
a270: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
a280: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
a290: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
a2a0: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
a2b0: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
a2c0: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
a2d0: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
a2e0: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
a2f0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
a300: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
a310: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
a320: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
a330: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
a340: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
a350: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
a360: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
a370: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
a380: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
a390: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
a3a0: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
a3b0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
a3c0: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
a3d0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
a3e0: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
a3f0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
a400: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
a410: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
a420: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
a430: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
a440: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
a450: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
a460: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
a470: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
a480: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
a490: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
a4a0: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
a4b0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
a4c0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
a4d0: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
a4e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
a4f0: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
a500: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
a510: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
a520: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
a530: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
a540: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
a550: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
a560: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
a570: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
a580: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
a590: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
a5a0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
a5b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
a5c0: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
a5d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a5e0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
a5f0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
a600: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
a610: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
a620: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
a630: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a640: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a650: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a660: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
a670: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
a680: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
a690: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
a6a0: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
a6b0: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
a6c0: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
a6d0: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
a6e0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
a6f0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
a700: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
a710: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
a720: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
a730: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
a740: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
a750: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
a760: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
a770: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
a780: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
a790: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
a7a0: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
a7b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a7c0: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
a7d0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
a7e0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a7f0: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
a800: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
a810: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
a820: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
a830: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
a840: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a850: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a860: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
a870: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
a880: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
a890: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
a8a0: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
a8b0: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
a8c0: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
a8d0: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
a8e0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
a8f0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
a900: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
a910: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
a920: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
a930: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a940: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
a950: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
a960: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
a970: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
a980: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
a990: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
a9a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
a9b0: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
a9c0: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
a9d0: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
a9e0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
a9f0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
aa00: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
aa10: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
aa20: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
aa30: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
aa40: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
aa50: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
aa60: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
aa70: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
aa80: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
aa90: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
aaa0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
aab0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
aac0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
aad0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
aae0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
aaf0: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
ab00: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
ab10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ab20: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
ab30: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
ab40: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
ab50: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ab60: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ab70: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ab80: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ab90: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
aba0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
abb0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
abc0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
abd0: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
abe0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
abf0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ac00: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
ac10: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
ac20: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
ac30: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ac40: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
ac50: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
ac60: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
ac70: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
ac80: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
ac90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
aca0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
acb0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
acc0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
acd0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ace0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
acf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad00: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
ad10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ad20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ad30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ad40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ad50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ad60: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
ad70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ad80: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
ad90: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
ada0: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
adb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
adc0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
add0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ade0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
adf0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ae00: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
ae10: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
ae20: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
ae30: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
ae40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ae50: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
ae60: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
ae70: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ae80: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ae90: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
aea0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
aeb0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
aec0: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
aed0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
aee0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
aef0: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
af00: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
af10: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
af20: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
af30: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
af40: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
af50: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
af60: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
af70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
af80: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
af90: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
afa0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
afb0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
afe0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
aff0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b000: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
b010: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b020: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
b030: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b040: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b060: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
b070: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b080: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
b090: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
b0a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b0b0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
b0c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b0d0: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
b0e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b0f0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
b100: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
b110: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
b120: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
b130: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
b140: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20  erands */.  u16 
b150: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
b160: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
b170: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
b180: 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79  puts */.  u16 ty
b190: 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe1;      /* Num
b1a0: 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66  eric type of lef
b1b0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75  t operand */.  u
b1c0: 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f  16 type2;      /
b1d0: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
b1e0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b1f0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
b200: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
b210: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
b220: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
b230: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
b240: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
b250: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b260: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
b270: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
b280: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
b290: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
b2a0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b2b0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
b2c0: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
b2d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b2e0: 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72  .  type1 = numer
b2f0: 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20  icType(pIn1);.  
b300: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b310: 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d  ->p2];.  type2 =
b320: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
b330: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
b340: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
b350: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
b360: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b370: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
b380: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
b390: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b3a0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b3b0: 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20 74    if( (type1 & t
b3c0: 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21  ype2 & MEM_Int)!
b3d0: 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70  =0 ){.    iA = p
b3e0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42  In1->u.i;.    iB
b3f0: 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
b400: 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20    bIntint = 1;. 
b410: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
b420: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
b430: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b440: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64     if( sqlite3Ad
b450: 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  dInt64(&iB,iA) )
b460: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b470: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b480: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
b490: 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e  if( sqlite3SubIn
b4a0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b4b0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b4c0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b4d0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28  P_Multiply:  if(
b4e0: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
b4f0: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b500: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b510: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b520: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b530: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b540: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b550: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b560: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b570: 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  && iB==SMALLEST_
b580: 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f  INT64 ) goto fp_
b590: 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42  math;.        iB
b5a0: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
b5b0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b5c0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b5d0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b5e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b5f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b600: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b610: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b620: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
b630: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b640: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b650: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b660: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
b670: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b680: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
b690: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b      bIntint = 0;
b6a0: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
b6b0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
b6c0: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
b6d0: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
b6e0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
b6f0: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
b700: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
b710: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
b720: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
b730: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
b740: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
b750: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
b760: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
b770: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b780: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
b790: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
b7a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b7b0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
b7c0: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
b7d0: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
b7e0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
b7f0: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
b800: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
b810: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
b820: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
b830: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
b840: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
b850: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b860: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
b870: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
b880: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
b890: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
b8a0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b8b0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b8c0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b8d0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b8e0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
b8f0: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
b900: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
b910: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
b920: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
b930: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
b940: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
b950: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
b960: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
b970: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
b980: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
b990: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
b9a0: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
b9b0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
b9c0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
b9d0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
b9e0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
b9f0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
ba00: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
ba10: 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32  f( ((type1|type2
ba20: 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26  )&MEM_Real)==0 &
ba30: 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20  & !bIntint ){.  
ba40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
ba50: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
ba60: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
ba70: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
ba80: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
ba90: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
baa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
bab0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
bac0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bad0: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
bae0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
baf0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
bb00: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
bb10: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
bb20: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
bb30: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
bb40: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
bb50: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
bb60: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
bb70: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
bb80: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
bb90: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
bba0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
bbb0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
bbc0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
bbd0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
bbe0: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
bbf0: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
bc00: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
bc10: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
bc20: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
bc30: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
bc40: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
bc50: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
bc60: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
bc70: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
bc80: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
bc90: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
bca0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
bcb0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
bcc0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
bcd0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
bce0: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
bcf0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
bd00: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
bd10: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
bd20: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
bd30: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
bd40: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
bd50: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
bd60: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
bd70: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
bd80: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
bd90: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
bda0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
bdb0: 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70  LLSEQ );.  if( p
bdc0: 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
bdd0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
bde0: 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
bdf0: 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62  p1], 0);.  }.  b
be00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
be10: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
be20: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
be30: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66  ynopsis: r[P3]=f
be40: 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  unc(r[P2@P5]).**
be50: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
be60: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
be70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
be80: 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74   Function struct
be90: 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ure that.** defi
bea0: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
beb0: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
bec0: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
bed0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
bee0: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
bef0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
bf00: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
bf10: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
bf20: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
bf30: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
bf40: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
bf50: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
bf60: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
bf70: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
bf80: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
bf90: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
bfa0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
bfb0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
bfc0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
bfd0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
bfe0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
bff0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
c000: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
c010: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
c020: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
c030: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
c040: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
c050: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c060: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c070: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
c080: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
c090: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
c0a0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
c0b0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
c0c0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
c0d0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
c0e0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
c0f0: 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64  lso: AggStep and
c100: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
c110: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b  e OP_Function: {
c120: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
c130: 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  *pArg;.  sqlite3
c140: 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20  _context ctx;.  
c150: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
c160: 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a  apVal;.  int n;.
c170: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
c180: 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41    apVal = p->apA
c190: 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70  rg;.  assert( ap
c1a0: 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20  Val || n==0 );. 
c1b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
c1c0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
c1d0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
c1e0: 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75  or) );.  ctx.pOu
c1f0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
c200: 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
c210: 43 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f  Change(p, ctx.pO
c220: 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ut);..  assert( 
c230: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
c240: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
c250: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
c260: 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
c270: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
c280: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
c290: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
c2a0: 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f   pArg = &aMem[pO
c2b0: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
c2c0: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
c2d0: 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  g++){.    assert
c2e0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72  ( memIsValid(pAr
c2f0: 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  g) );.    apVal[
c300: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44  i] = pArg;.    D
c310: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41  eephemeralize(pA
c320: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
c330: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
c340: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
c350: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
c360: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
c370: 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20   );.  ctx.pFunc 
c380: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
c390: 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b  .  ctx.iOp = pc;
c3a0: 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70  .  ctx.pVdbe = p
c3b0: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
c3c0: 61 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d  ag(ctx.pOut, MEM
c3d0: 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 66  _Null);..  ctx.f
c3e0: 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a  ErrorOrAux = 0;.
c3f0: 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
c400: 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c  >funcFlags & SQL
c410: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
c420: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
c430: 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
c440: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
c450: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
c460: 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EQ );.    assert
c470: 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
c480: 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
c490: 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20      ctx.pColl = 
c4a0: 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c  pOp[-1].p4.pColl
c4b0: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74  ;.  }.  db->last
c4c0: 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
c4d0: 64 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63  d;.  (*ctx.pFunc
c4e0: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
c4f0: 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
c500: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
c510: 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  */.  lastRowid =
c520: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
c530: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
c540: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
c550: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
c560: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
c570: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
c580: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
c590: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
c5a0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
c5b0: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
c5c0: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
c5d0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
c5e0: 63 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20 20  ctx.pOut));.    
c5f0: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
c600: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
c610: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
c620: 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f  uxData(p, pc, pO
c630: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
c640: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
c650: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
c660: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
c670: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
c680: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
c690: 67 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63 6f  g(ctx.pOut, enco
c6a0: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c  ding);.  if( sql
c6b0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
c6c0: 67 28 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a 20  g(ctx.pOut) ){. 
c6d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
c6e0: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
c6f0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
c700: 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50 44  ctx.pOut);.  UPD
c710: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c720: 28 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62 72  (ctx.pOut);.  br
c730: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c740: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
c750: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c760: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
c770: 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  &r[P2].**.** Tak
c780: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
c790: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
c7a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c7b0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
c7c0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c7d0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c7e0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
c7f0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
c800: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c810: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
c820: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
c830: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c840: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
c850: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
c860: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
c870: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
c880: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
c890: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
c8a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c8b0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c8c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c8d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c8e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c8f0: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
c900: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c910: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
c920: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
c930: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
c940: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
c950: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
c960: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
c970: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
c980: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
c990: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
c9a0: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
c9b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c9c0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c9d0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c9e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c9f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
ca00: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
ca10: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
ca20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ca30: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50  r[P3]=r[P2]>>r[P
ca40: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
ca50: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
ca60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
ca70: 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20  to the right by 
ca80: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
ca90: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
caa0: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
cab0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
cac0: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
cad0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
cae0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
caf0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cb00: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cb10: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
cb20: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
cb30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cb40: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c   TK_BITAND, in1,
cb50: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
cb60: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cb80: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f   same as TK_BITO
cb90: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
cba0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
cbb0: 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20  ftLeft:         
cbc0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cbd0: 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_LSHIFT, in1, 
cbe0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cbf0: 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a  e OP_ShiftRight:
cc00: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
cc10: 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46  same as TK_RSHIF
cc20: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
cc30: 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20  3 */.  i64 iA;. 
cc40: 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69   u64 uA;.  i64 i
cc50: 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70  B;.  u8 op;..  p
cc60: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cc70: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
cc80: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
cc90: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
cca0: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
ccb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
ccc0: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
ccd0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
cce0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
ccf0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
cd00: 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73  ak;.  }.  iA = s
cd10: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cd20: 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d  ue(pIn2);.  iB =
cd30: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
cd40: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70  alue(pIn1);.  op
cd50: 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
cd60: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74    if( op==OP_Bit
cd70: 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d  And ){.    iA &=
cd80: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
cd90: 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b   op==OP_BitOr ){
cda0: 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20  .    iA |= iB;. 
cdb0: 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30   }else if( iB!=0
cdc0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
cdd0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  op==OP_ShiftRigh
cde0: 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  t || op==OP_Shif
cdf0: 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a  tLeft );..    /*
ce00: 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20   If shifting by 
ce10: 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e  a negative amoun
ce20: 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20  t, shift in the 
ce30: 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20  other direction 
ce40: 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20  */.    if( iB<0 
ce50: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
ce60: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d   OP_ShiftRight==
ce70: 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29  OP_ShiftLeft+1 )
ce80: 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f  ;.      op = 2*O
ce90: 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20  P_ShiftLeft + 1 
cea0: 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d  - op;.      iB =
ceb0: 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20   iB>(-64) ? -iB 
cec0: 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  : 64;.    }..   
ced0: 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20   if( iB>=64 ){. 
cee0: 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30       iA = (iA>=0
cef0: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
cf00: 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a  Left) ? 0 : -1;.
cf10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cf20: 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41   memcpy(&uA, &iA
cf30: 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20  , sizeof(uA));. 
cf40: 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f       if( op==OP_
cf50: 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20  ShiftLeft ){.   
cf60: 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a       uA <<= iB;.
cf70: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
cf80: 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a       uA >>= iB;.
cf90: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d          /* Sign-
cfa0: 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68  extend on a righ
cfb0: 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67  t shift of a neg
cfc0: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  ative number */.
cfd0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30          if( iA<0
cfe0: 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34   ) uA |= ((((u64
cff0: 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32  )0xffffffff)<<32
d000: 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c  )|0xffffffff) <<
d010: 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20   (64-iB);.      
d020: 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  }.      memcpy(&
d030: 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28  iA, &uA, sizeof(
d040: 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  iA));.    }.  }.
d050: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41    pOut->u.i = iA
d060: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
d070: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
d080: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
d090: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
d0a0: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
d0b0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31   Synopsis:  r[P1
d0c0: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
d0d0: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
d0e0: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
d0f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d100: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
d110: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
d120: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
d130: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
d140: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
d150: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
d160: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
d170: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
d180: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d190: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d1a0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
d1b0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
d1c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d1d0: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
d1e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
d1f0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
d200: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d210: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
d220: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
d230: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d240: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d250: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
d260: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
d270: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
d280: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
d290: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
d2a0: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
d2b0: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
d2c0: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
d2d0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
d2e0: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
d2f0: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
d300: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
d310: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
d320: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
d330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
d340: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
d350: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d360: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d370: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
d380: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
d390: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
d3a0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
d3b0: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
d3c0: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
d3d0: 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  n((pIn1->flags&M
d3e0: 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a  EM_Int)==0, 2);.
d3f0: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
d400: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
d410: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
d420: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
d430: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
d440: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
d450: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
d460: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
d470: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
d480: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
d490: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
d4a0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d4b0: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
d4c0: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
d4d0: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
d4e0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d4f0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
d500: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
d510: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
d520: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
d530: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
d540: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
d550: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
d560: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
d570: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
d580: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
d590: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
d5a0: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
d5b0: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
d5c0: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
d5d0: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
d5e0: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
d5f0: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
d600: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
d610: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
d620: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
d630: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
d640: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
d650: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
d660: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
d670: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d680: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d690: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d6a0: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
d6b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d6c0: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
d6d0: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
d6e0: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d6f0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
d700: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d710: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
d720: 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Cast P1 P2 * * 
d730: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
d740: 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a  ffinity(r[P1]).*
d750: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d760: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d770: 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79   P1 to be the ty
d780: 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32  pe defined by P2
d790: 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  ..** .** <ul>.**
d7a0: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e   <li value="97">
d7b0: 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c   TEXT.** <li val
d7c0: 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a  ue="98"> BLOB.**
d7d0: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e   <li value="99">
d7e0: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20   NUMERIC.** <li 
d7f0: 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54  value="100"> INT
d800: 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  EGER.** <li valu
d810: 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a  e="101"> REAL.**
d820: 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e   </ul>.**.** A N
d830: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d840: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d850: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d860: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d870: 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20  ase OP_Cast: {  
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  /* in1 */.  asse
d8a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c  rt( pOp->p2>=SQL
d8b0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26 20  ITE_AFF_NONE && 
d8c0: 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f  pOp->p2<=SQLITE_
d8d0: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65  AFF_REAL );.  te
d8e0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d8f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
d900: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d910: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d920: 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74 65  AFF_NONE );.  te
d930: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d940: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
d950: 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73  RIC );.  testcas
d960: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
d970: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29  TE_AFF_INTEGER )
d980: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d990: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d9a0: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31  F_REAL );.  pIn1
d9b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d9c0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d9d0: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d9e0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d9f0: 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  b(pIn1);.  sqlit
da00: 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49  e3VdbeMemCast(pI
da10: 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63  n1, pOp->p2, enc
da20: 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
da30: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
da40: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
da50: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
da60: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
da70: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
da80: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
da90: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
daa0: 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]<r[P3] goto P2.
dab0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
dac0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dad0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
dae0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
daf0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
db00: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
db10: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
db20: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
db30: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
db40: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
db50: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
db60: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
db70: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
db80: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
db90: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
dba0: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
dbb0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
dbc0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dbd0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
dbe0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dbf0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
dc00: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
dc10: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
dc20: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
dc30: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
dc40: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
dc50: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
dc60: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
dc70: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
dc80: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
dc90: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
dca0: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
dcb0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
dcc0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
dcd0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
dce0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
dcf0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
dd00: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
dd10: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
dd20: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
dd30: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
dd40: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
dd50: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
dd60: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
dd70: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
dd80: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
dd90: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dda0: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
ddb0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
ddc0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
ddd0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
dde0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
ddf0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
de00: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
de10: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
de20: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
de30: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
de40: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
de50: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
de60: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
de70: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
de80: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
de90: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
dea0: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
deb0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
dec0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
ded0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
dee0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
def0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
df00: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
df10: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
df20: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
df30: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
df40: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
df50: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
df60: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
df70: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
df80: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
df90: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
dfa0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
dfb0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
dfc0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
dfd0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
dfe0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
dff0: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
e000: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
e010: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
e020: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
e030: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
e040: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
e050: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
e060: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
e070: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e080: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e090: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20  LITE_NULLEQ bit 
e0a0: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
e0b0: 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  en NULL values a
e0c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a  re considered.**
e0d0: 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
e0e0: 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20  other, provided 
e0f0: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
e100: 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f   have their MEM_
e110: 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73  Cleared.** bit s
e120: 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  et..*/./* Opcode
e130: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e140: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e150: 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d   if r[P1]!=r[P3]
e160: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e170: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e180: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e190: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e1a0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e1b0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e1c0: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e1d0: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e1e0: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e1f0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
e200: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e210: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e220: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e230: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e240: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e250: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e260: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e270: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e280: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e290: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e2a0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e2b0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e2c0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e2d0: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
e2e0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e2f0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e300: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
e310: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e320: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e330: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e340: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e350: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e360: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e370: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e380: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e390: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
e3a0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e3b0: 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20  if r[P1]==r[P3] 
e3c0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e3d0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e3e0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e3f0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e400: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e410: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e420: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e430: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
e440: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
e450: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e460: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e470: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
e480: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e490: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
e4a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
e4b0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
e4c0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e4d0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e4e0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e4f0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e500: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e510: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e520: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e530: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e540: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e550: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e560: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e570: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e580: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e590: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e5a0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e5b0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e5c0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e5d0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
e5e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
e5f0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e600: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e610: 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]<=r[P3] goto P
e620: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e630: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e640: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e650: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e660: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e670: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e680: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
e690: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
e6a0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e6b0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e6c0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e6d0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e6e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e6f0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
e700: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e710: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e720: 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74   r[P1]>r[P3] got
e730: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
e740: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e750: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e760: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e770: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e780: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
e790: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
e7a0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
e7b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
e7c0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
e7d0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e7e0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e7f0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
e800: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
e810: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e820: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e830: 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  >=r[P3] goto P2.
e840: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e850: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e860: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e870: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e880: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e890: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e8a0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
e8b0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
e8c0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
e8d0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e8e0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e8f0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e900: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e910: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e930: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
e940: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e950: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e970: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
e980: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e990: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
e9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e9b0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
e9c0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e9d0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
e9e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e9f0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ea00: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ea10: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
ea20: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ea30: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ea40: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ea50: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ea60: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ea70: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ea80: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ea90: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  es;            /
eaa0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
eab0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
eac0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
ead0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
eae0: 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
eaf0: 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
eb00: 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
eb10: 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
eb20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
eb30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
eb40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
eb50: 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
eb60: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
eb70: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
eb80: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
eb90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
eba0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
ebb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
ebc0: 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
ebd0: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
ebe0: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
ebf0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
ec00: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
ec10: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
ec20: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
ec30: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
ec40: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
ec50: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
ec60: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
ec70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
ec80: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
ec90: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
eca0: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
ecb0: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
ecc0: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
ecd0: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
ece0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
ecf0: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
ed00: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
ed10: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
ed20: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
ed30: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
ed40: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
ed50: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
ed60: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
ed70: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
ed80: 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
ed90: 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
eda0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
edb0: 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20  IFNULL)==0 );.  
edc0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
edd0: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
ede0: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
edf0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
ee00: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
ee10: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20  M_Cleared)==0.  
ee20: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
ee30: 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75  es = 0;  /* Resu
ee40: 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  lts are equal */
ee50: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ee60: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
ee70: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e  /* Results are n
ee80: 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
ee90: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
eea0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
eeb0: 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61  ULLEQ is clear a
eec0: 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  nd at least one 
eed0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
eee0: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74  .      ** then t
eef0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
ef00: 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20  ays NULL..      
ef10: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
ef20: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
ef30: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
ef40: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20  t is set..      
ef50: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  */.      if( pOp
ef60: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
ef70: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20  OREP2 ){.       
ef80: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ef90: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
efa0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
efb0: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
efc0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
efd0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
efe0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
eff0: 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
f000: 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
f010: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
f020: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
f030: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
f040: 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
f050: 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d  >p2-1;.        }
f060: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
f070: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f080: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f090: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f0a0: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f0b0: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f0c0: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f0d0: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f0e0: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f0f0: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f100: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 61  _TEXT ){.      a
f110: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
f120: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
f130: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70  oding);.      ap
f140: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
f150: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
f160: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28  ding);.      if(
f170: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
f180: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
f190: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
f1a0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
f1b0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
f1c0: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
f1d0: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d  );.    if( pIn1-
f1e0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
f1f0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
f200: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
f210: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 20  lob(pIn1);.     
f220: 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f   flags1 &= ~MEM_
f230: 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Zero;.    }.    
f240: 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  if( pIn3->flags 
f250: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
f260: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
f270: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
f280: 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33  3);.      flags3
f290: 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
f2a0: 20 20 20 7d 0a 20 20 20 20 72 65 73 20 3d 20 73     }.    res = s
f2b0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f2c0: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
f2d0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
f2e0: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
f2f0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
f300: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
f310: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
f320: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f330: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
f340: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
f350: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
f360: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
f370: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
f380: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
f390: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
f3a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f3b0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
f3c0: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
f3d0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
f3e0: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
f3f0: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
f400: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
f410: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
f420: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
f430: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f440: 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  2];.    memAbout
f450: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
f460: 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
f470: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
f480: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
f490: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
f4a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
f4b0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
f4c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
f4d0: 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
f4e0: 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  0, (pOp->p5 & SQ
f4f0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33  LITE_NULLEQ)?2:3
f500: 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
f510: 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
f520: 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ->p2-1;.    }.  
f530: 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  }.  /* Undo any 
f540: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
f550: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
f560: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
f570: 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e  isters. */.  pIn
f580: 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
f590: 31 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  1;.  pIn3->flags
f5a0: 20 3d 20 66 6c 61 67 73 33 3b 0a 20 20 62 72 65   = flags3;.  bre
f5b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f5c0: 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
f5d0: 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
f5e0: 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
f5f0: 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
f600: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
f610: 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72  or to be the arr
f620: 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ay.** of integer
f630: 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54  s in P4..**.** T
f640: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
f650: 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74  s only valid unt
f660: 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43  il the next OP_C
f670: 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a  ompare that has.
f680: 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  ** the OPFLAG_PE
f690: 52 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e  RMUTE bit set in
f6a0: 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74   P5. Typically t
f6b0: 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  he OP_Permutatio
f6c0: 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63  n should .** occ
f6d0: 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70  ur immediately p
f6e0: 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43  rior to the OP_C
f6f0: 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  ompare..*/.case 
f700: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
f710: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
f720: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
f730: 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
f740: 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
f750: 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
f760: 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b  ->p4.ai;.  break
f770: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f780: 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
f790: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
f7a0: 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e  is: r[P1@P3] <->
f7b0: 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20   r[P2@P3].**.** 
f7c0: 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74  Compare two vect
f7d0: 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
f7e0: 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
f7f0: 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20  (P1+P3-1) (call 
f800: 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22  this.** vector "
f810: 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
f820: 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
f830: 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
f840: 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
f850: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
f860: 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
f870: 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
f880: 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ct..**.** If P5 
f890: 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50  has the OPFLAG_P
f8a0: 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20  ERMUTE bit set, 
f8b0: 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f  then the order o
f8c0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a  f comparison is.
f8d0: 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
f8e0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
f8f0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
f900: 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68  operator.  If th
f910: 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d  e.** OPFLAG_PERM
f920: 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  UTE bit is clear
f930: 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  , then register 
f940: 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20  are compared in 
f950: 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72  sequential.** or
f960: 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  der..**.** P4 is
f970: 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
f980: 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
f990: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
f9a0: 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
f9b0: 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
f9c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
f9d0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
f9e0: 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
f9f0: 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
fa00: 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
fa10: 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
fa20: 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
fa30: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
fa40: 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
fa50: 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
fa60: 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
fa70: 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
fa80: 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
fa90: 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
faa0: 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
fab0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
fac0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
fad0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
fae0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
faf0: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
fb00: 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
fb10: 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
fb20: 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
fb30: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
fb40: 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
fb50: 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
fb60: 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
fb70: 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
fb80: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
fb90: 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
fba0: 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20  ort order */..  
fbb0: 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
fbc0: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
fbd0: 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30  0 ) aPermute = 0
fbe0: 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ;.  n = pOp->p3;
fbf0: 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
fc00: 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
fc10: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
fc20: 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
fc30: 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
fc40: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
fc50: 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51   pOp->p2;.#if SQ
fc60: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
fc70: 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
fc80: 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
fc90: 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
fca0: 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
fcb0: 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
fcc0: 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
fcd0: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
fce0: 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p1+mx<=(p->nMe
fcf0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
fd00: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
fd10: 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70  2>0 && p2+mx<=(p
fd20: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
fd30: 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  r)+1 );.  }else{
fd40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
fd50: 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p1+n<=(p->n
fd60: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
fd70: 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
fd80: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28   p2>0 && p2+n<=(
fd90: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
fda0: 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e  or)+1 );.  }.#en
fdb0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
fdc0: 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30  BUG */.  for(i=0
fdd0: 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
fde0: 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20   idx = aPermute 
fdf0: 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20  ? aPermute[i] : 
fe00: 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  i;.    assert( m
fe10: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
fe20: 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p1+idx]) );.    
fe30: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
fe40: 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  id(&aMem[p2+idx]
fe50: 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
fe60: 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
fe70: 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a  &aMem[p1+idx]);.
fe80: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
fe90: 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p2+idx, &aMem
fea0: 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61  [p2+idx]);.    a
feb0: 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66  ssert( i<pKeyInf
fec0: 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20  o->nField );.   
fed0: 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66   pColl = pKeyInf
fee0: 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20  o->aColl[i];.   
fef0: 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f   bRev = pKeyInfo
ff00: 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b  ->aSortOrder[i];
ff10: 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20  .    iCompare = 
ff20: 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
ff30: 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  e(&aMem[p1+idx],
ff40: 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20   &aMem[p2+idx], 
ff50: 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20  pColl);.    if( 
ff60: 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20  iCompare ){.    
ff70: 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f    if( bRev ) iCo
ff80: 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
ff90: 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  e;.      break;.
ffa0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72      }.  }.  aPer
ffb0: 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  mute = 0;.  brea
ffc0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ffd0: 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a   Jump P1 P2 P3 *
ffe0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
fff0: 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   the instruction
10000 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20   at address P1, 
10010 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64  P2, or P3 depend
10020 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
10030 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  * in the most re
10040 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  cent OP_Compare 
10050 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20  instruction the 
10060 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65  P1 vector was le
10070 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c  ss than.** equal
10080 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20   to, or greater 
10090 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74  than the P2 vect
100a0 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  or, respectively
100b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
100c0 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  p: {            
100d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
100e0 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a  ( iCompare<0 ){.
100f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31      pc = pOp->p1
10100 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
10110 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20 20 7d  hTaken(0,3);.  }
10120 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
10130 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
10140 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56   pOp->p2 - 1;  V
10150 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
10160 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ,3);.  }else{.  
10170 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d    pc = pOp->p3 -
10180 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
10190 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a 20  aken(2,3);.  }. 
101a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
101b0 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
101c0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
101d0 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
101e0 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   && r[P2]).**.**
101f0 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
10200 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
10210 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
10220 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10230 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
10240 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
10250 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
10260 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
10270 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
10280 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
10290 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
102a0 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
102b0 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
102c0 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
102d0 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
102e0 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
102f0 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
10300 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
10310 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
10320 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   || r[P2]).**.**
10330 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
10340 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
10350 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
10360 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
10370 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
10380 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
10390 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
103a0 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
103b0 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
103c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
103d0 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
103e0 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
103f0 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
10400 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
10410 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
10420 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
10430 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
10440 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
10450 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
10460 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10470 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
10480 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10490 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
104a0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
104b0 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
104c0 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
104d0 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
104e0 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
104f0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
10500 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
10510 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
10520 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
10530 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
10540 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
10550 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
10560 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10570 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10580 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
10590 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
105a0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
105b0 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49  n1)!=0;.  }.  pI
105c0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
105d0 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d  p2];.  if( pIn2-
105e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
105f0 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
10600 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
10610 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10620 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
10630 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
10640 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
10650 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10660 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10670 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
10680 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
10690 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
106a0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
106b0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
106c0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
106d0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
106e0 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
106f0 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
10700 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
10710 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
10720 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
10730 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10740 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
10750 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
10760 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
10770 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
10780 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
10790 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
107a0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
107b0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
107c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
107d0 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
107e0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
107f0 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
10800 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
10810 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10820 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
10830 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
10840 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
10850 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
10860 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
10870 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
10880 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
10890 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
108a0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
108b0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
108c0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
108d0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
108e0 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
108f0 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
10900 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10910 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
10920 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
10930 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
10940 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
10950 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10960 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
10970 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
10980 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
10990 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33  ->u.i = !sqlite3
109a0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
109b0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
109c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
109d0 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
109e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
109f0 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P1]= ~r[P1].**.
10a00 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
10a10 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
10a20 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
10a30 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
10a40 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
10a50 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
10a60 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
10a70 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
10a80 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
10a90 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
10aa0 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
10ab0 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
10ac0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10ad0 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
10ae0 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
10af0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10b00 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
10b10 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
10b20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10b30 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
10b40 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10b50 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
10b60 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
10b70 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
10b80 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
10b90 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
10ba0 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
10bb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10bc0 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
10bd0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
10be0 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20  the "once" flag 
10bf0 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74  number P1. If it
10c00 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f   is set, jump to
10c10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
10c20 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20   .** Otherwise, 
10c30 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64  set the flag and
10c40 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
10c50 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
10c60 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68  ction..** In oth
10c70 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f  er words, this o
10c80 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c  pcode causes all
10c90 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64   following opcod
10ca0 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32  es up through P2
10cb0 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63  .** (but not inc
10cc0 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75  luding P2) to ru
10cd0 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20  n just once and 
10ce0 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e  to be skipped on
10cf0 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74   subsequent.** t
10d00 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  imes through the
10d10 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c   loop..**.** All
10d20 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72   "once" flags ar
10d30 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61  e initially clea
10d40 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70  red whenever a p
10d50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10d60 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e  t.** first begin
10d70 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73  s to run..*/.cas
10d80 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20  e OP_Once: {    
10d90 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
10da0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
10db0 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c  p->p1<p->nOnceFl
10dc0 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  ag );.  VdbeBran
10dd0 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65  chTaken(p->aOnce
10de0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  Flag[pOp->p1]!=0
10df0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  , 2);.  if( p->a
10e00 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
10e10 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  ] ){.    pc = pO
10e20 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
10e30 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
10e40 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
10e50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
10e70 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
10e80 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
10e90 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10ea0 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
10eb0 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
10ec0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
10ed0 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
10ee0 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
10ef0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
10f00 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
10f10 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
10f20 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
10f30 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
10f40 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
10f50 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
10f60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
10f70 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
10f80 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10f90 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
10fa0 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
10fb0 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
10fc0 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
10fd0 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
10fe0 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
10ff0 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
11000 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
11010 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
11020 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
11030 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
11060 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
11070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11080 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
11090 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
110a0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
110b0 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
110c0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
110d0 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
110e0 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
110f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
11100 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
11110 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
11120 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
11130 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
11140 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
11150 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
11160 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
11170 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
11180 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
11190 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
111a0 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
111b0 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
111c0 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
111d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
111e0 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
111f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
11200 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31  nopsis:  if r[P1
11210 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
11220 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
11230 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
11240 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
11250 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
11260 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
11270 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11280 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
11290 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
112a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
112b0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
112c0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
112d0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
112e0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
112f0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11300 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70  ull)!=0 ){.    p
11310 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
11320 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11330 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
11340 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11350 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
11360 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
11370 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
11380 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11390 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
113a0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
113b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
113c0 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
113d0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
113e0 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
113f0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
11400 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11410 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11420 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11430 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
11440 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
11450 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11460 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
11470 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
11480 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11490 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
114a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
114b0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
114c0 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ]=PX.**.** Inter
114d0 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
114e0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
114f0 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
11500 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
11510 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
11520 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
11530 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
11540 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
11550 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
11560 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11570 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
11580 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
11590 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
115a0 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
115b0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
115c0 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
115d0 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
115e0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
115f0 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
11600 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
11610 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
11620 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
11630 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
11640 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
11650 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
11660 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
11670 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
11680 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
11690 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
116a0 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
116b0 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
116c0 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
116d0 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
116e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
116f0 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
11700 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
11710 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
11720 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
11730 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
11740 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
11750 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
11760 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
11770 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
11780 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
11790 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
117a0 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
117b0 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
117c0 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
117d0 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
117e0 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
117f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
11800 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
11810 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
11820 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
11830 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
11840 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
11850 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
11860 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
11870 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
11880 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
11890 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
118a0 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
118b0 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
118c0 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
118d0 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
118e0 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
118f0 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
11900 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
11910 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
11920 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
11930 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53  {.  i64 payloadS
11940 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72  ize64; /* Number
11950 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
11960 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11970 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
11980 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
11990 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
119a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
119b0 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
119c0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
119d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
119e0 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
119f0 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
11a00 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
11a10 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
11a20 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
11a30 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
11a40 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
11a50 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
11a60 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
11a70 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
11a80 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
11a90 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
11aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11ab0 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11ac0 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
11ad0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
11ae0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
11af0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
11b00 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
11b10 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
11b20 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
11b30 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
11b40 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
11b50 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
11b60 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
11b70 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
11b80 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
11b90 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
11ba0 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
11bb0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
11bc0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
11bd0 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
11be0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
11bf0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
11c00 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
11c10 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
11c20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
11c30 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
11c40 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
11c50 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
11c60 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
11c70 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
11c80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11c90 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
11ca0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
11cb0 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  eld */.  u32 ava
11cc0 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
11cd0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
11ce0 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
11cf0 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
11d00 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
11d10 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
11d20 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
11d30 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
11d40 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
11d50 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
11d60 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20  ster */..  p2 = 
11d70 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
11d80 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
11d90 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
11da0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
11db0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
11dc0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
11dd0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
11de0 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72   pDest);.  asser
11df0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
11e00 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
11e10 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
11e20 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
11e30 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
11e40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
11e50 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
11e60 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79   aType = pC->aTy
11e70 70 65 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20  pe;.  aOffset = 
11e80 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69 65  aType + pC->nFie
11e90 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ld;.#ifndef SQLI
11ea0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11eb0 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
11ec0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
11ed0 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0 ); /* OP_Colum
11ee0 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f  n never called o
11ef0 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  n virtual table 
11f00 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  */.#endif.  pCrs
11f10 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
11f20 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
11f30 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64  !=0 || pC->pseud
11f40 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f  oTableReg>0 ); /
11f50 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20  * pCrsr NULL on 
11f60 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
11f70 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
11f80 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
11f90 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  w );          /*
11fa0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20   pC->nullRow on 
11fb0 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a  PseudoTables */.
11fc0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
11fd0 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
11fe0 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
11ff0 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
12000 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
12010 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
12020 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
12030 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
12040 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  r;.  if( pC->cac
12050 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
12060 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e 70  heCtr || (pOp->p
12070 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  5&OPFLAG_CLEARCA
12080 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  CHE)!=0 ){.    i
12090 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
120a0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72 73  {.      if( pCrs
120b0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r==0 ){.        
120c0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
120d0 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a  doTableReg>0 );.
120e0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
120f0 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54  aMem[pC->pseudoT
12100 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
12110 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
12120 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
12130 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
12140 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
12150 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
12160 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12170 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
12180 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
12190 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
121a0 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
121b0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
121c0 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
121d0 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
121e0 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  ull);.        go
121f0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
12200 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
12210 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
12220 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
12230 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
12240 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
12250 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
12260 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
12270 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
12280 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
12290 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b  =) sqlite3BtreeK
122a0 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  eySize(pCrsr, &p
122b0 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20  ayloadSize64);. 
122c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
122d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
122e0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
122f0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
12300 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
12310 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
12320 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
12330 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
12340 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
12350 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20 20  act the.        
12360 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c  ** payload size,
12370 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73   so it is imposs
12380 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64  ible for payload
12390 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20  Size64 to be.   
123a0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
123b0 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
123c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
123d0 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
123e0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
123f0 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
12400 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20  ze64 );.        
12410 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
12420 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28  e3BtreeKeyFetch(
12430 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
12440 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
12450 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
12460 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
12470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12480 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12490 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
124a0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
124b0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
124c0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
124d0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
124e0 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  , &pC->payloadSi
124f0 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ze);.        ass
12500 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
12510 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53  OK );   /* DataS
12520 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
12530 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d  l */.        pC-
12540 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
12550 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43  treeDataFetch(pC
12560 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
12570 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
12580 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36  rt( avail<=65536
12590 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20   );  /* Maximum 
125a0 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b  page size is 64K
125b0 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  iB */.      if( 
125c0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
125d0 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b  <= (u32)avail ){
125e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
125f0 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ow = pC->payload
12600 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Size;.      }els
12610 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  e{.        pC->s
12620 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20  zRow = avail;.  
12630 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
12640 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12650 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
12660 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
12670 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
12680 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
12690 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
126a0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
126b0 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b  s = p->cacheCtr;
126c0 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66  .    pC->iHdrOff
126d0 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33  set = getVarint3
126e0 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73  2(pC->aRow, offs
126f0 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64  et);.    pC->nHd
12700 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20  rParsed = 0;.   
12710 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66   aOffset[0] = of
12720 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61 76  fset;.    if( av
12730 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20  ail<offset ){.  
12740 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20      /* pC->aRow 
12750 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
12760 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65   hold the entire
12770 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65   row, but it doe
12780 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20  s at least.     
12790 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65   ** need to cove
127a0 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20  r the header of 
127b0 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20  the record.  If 
127c0 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
127d0 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20  t contain.      
127e0 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** the complete 
127f0 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74  header, then set
12800 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72   it to zero, for
12810 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20  cing the header 
12820 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64  to be.      ** d
12830 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
12840 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ated. */.      p
12850 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20  C->aRow = 0;.   
12860 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30     pC->szRow = 0
12870 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
12880 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
12890 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
128a0 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
128b0 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
128c0 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
128d0 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
128e0 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
128f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
12900 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
12910 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
12920 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
12930 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
12940 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
12950 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
12960 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
12970 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
12980 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
12990 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
129a0 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
129b0 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
129c0 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
129d0 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
129e0 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
129f0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
12a00 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
12a10 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
12a20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
12a30 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
12a40 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
12a50 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
12a60 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
12a70 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
12a80 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66  et > 98307 || of
12a90 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
12aa0 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
12ab0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
12ac0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
12ad0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
12ae0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
12af0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
12b00 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
12b10 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
12b20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
12b30 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
12b40 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
12b50 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
12b60 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 61 54  aOffset[] and aT
12b70 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
12b80 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
12b90 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
12ba0 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
12bb0 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
12bc0 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
12bd0 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
12be0 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
12bf0 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
12c00 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
12c10 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
12c20 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
12c30 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
12c40 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
12c50 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
12c60 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
12c70 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
12c80 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
12c90 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
12ca0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
12cb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
12cc0 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
12cd0 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
12ce0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
12cf0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
12d00 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f  ree(pCrsr, 0, aO
12d10 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20  ffset[0], .     
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
12d50 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
12d60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
12d70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
12d80 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
12d90 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
12da0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
12db0 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  *)sMem.z;.      
12dc0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
12dd0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
12de0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
12df0 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61 54 79    /* Fill in aTy
12e00 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
12e10 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
12e20 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
12e30 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20  eld. */.      i 
12e40 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
12e50 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d  ;.      offset =
12e60 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
12e70 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
12e80 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
12e90 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
12ea0 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
12eb0 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65  t[0];.      asse
12ec0 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  rt( i<=p2 && zHd
12ed0 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  r<zEndHdr );.   
12ee0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
12ef0 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20  f( zHdr[0]<0x80 
12f00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d  ){.          t =
12f10 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20   zHdr[0];.      
12f20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20      zHdr++;.    
12f30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12f40 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c       zHdr += sql
12f50 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
12f60 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20  zHdr, &t);.     
12f70 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79     }.        aTy
12f80 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
12f90 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c     szField = sql
12fa0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12fb0 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
12fc0 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69    offset += szFi
12fd0 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28  eld;.        if(
12fe0 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20   offset<szField 
12ff0 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f  ){  /* True if o
13000 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20  ffset overflows 
13010 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  */.          zHd
13020 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b  r = &zEndHdr[1];
13030 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49    /* Forces SQLI
13040 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72  TE_CORRUPT retur
13050 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20  n below */.     
13060 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
13070 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 2b      }.        i+
13080 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  +;.        aOffs
13090 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[i] = offset;.
130a0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
130b0 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
130c0 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  Hdr );.      pC-
130d0 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b  >nHdrParsed = i;
130e0 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  .      pC->iHdrO
130f0 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48  ffset = (u32)(zH
13100 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20  dr - zData);.   
13110 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
13120 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
13130 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
13140 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
13150 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
13160 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
13170 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 49   }.  .      /* I
13180 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
13190 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
131a0 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
131b0 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
131c0 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 69 66  ,.      ** or if
131d0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
131e0 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61  last field appea
131f0 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74 68  rs to be past th
13200 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20  e end of the.   
13210 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72     ** record, or
13220 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
13230 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
13240 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f  pears to be befo
13250 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 20  re the end.     
13260 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
13270 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c  d (when all fiel
13280 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65  ds present), the
13290 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61  n we must be dea
132a0 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a 20 77  ling .      ** w
132b0 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
132c0 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
132d0 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72  .      if( (zHdr
132e0 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20 20 20   > zEndHdr).    
132f0 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20     || (offset > 
13300 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13310 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48 64 72  .       || (zHdr
13320 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66  ==zEndHdr && off
13330 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  set!=pC->payload
13340 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
13350 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
13360 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
13370 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
13380 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
13390 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
133a0 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
133b0 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65  ying to extra ne
133c0 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
133d0 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
133e0 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
133f0 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
13400 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
13410 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
13420 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
13430 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
13440 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
13450 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
13460 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
13470 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
13480 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
13490 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
134a0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
134b0 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
134c0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
134d0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
134e0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
134f0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
13500 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
13510 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  e{.        MemSe
13520 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
13530 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
13540 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
13550 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
13560 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78    }.  }..  /* Ex
13570 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
13580 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
13590 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
135a0 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
135b0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
135c0 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
135d0 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
135e0 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d 20 61   and aType[p2] a
135f0 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
13600 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
13610 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
13620 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
13630 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13640 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
13650 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
13660 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
13670 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
13680 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
13690 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
136a0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
136b0 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e    if( pC->szRow>
136c0 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29  =aOffset[p2+1] )
136d0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  {.    /* This is
136e0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
136f0 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72   where the desir
13700 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20  ed content fits 
13710 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  on the original.
13720 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68      ** page - wh
13730 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ere the content 
13740 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65  is not on an ove
13750 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20  rflow page */.  
13760 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
13770 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b  ialGet(pC->aRow+
13780 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79  aOffset[p2], aTy
13790 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
137a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
137b0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
137c0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
137d0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
137e0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
137f0 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b    t = aType[p2];
13800 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e  .    if( ((pOp->
13810 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
13820 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
13830 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
13840 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
13850 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
13860 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
13870 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
13880 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e  0)).     || (len
13890 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
138a0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d  rialTypeLen(t))=
138b0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
138c0 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
138d0 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20  relevant for.   
138e0 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20     **    1. the 
138f0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
13900 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32  n,.      **    2
13910 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  . the length(X) 
13920 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73  function if X is
13930 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20   a blob, and.   
13940 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74     **    3. if t
13950 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74  he content lengt
13960 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20  h is zero..     
13970 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20   ** So we might 
13980 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75  as well use bogu
13990 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
139a0 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20   than reading.  
139b0 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66      ** content f
139c0 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20  rom disk.  NULL 
139d0 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 74 68  will work for th
139e0 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74 72 69  e value for stri
139f0 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  ngs.      ** and
13a00 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61 74 65   blobs and whate
13a10 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70 61  ver is in the pa
13a20 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69  yloadSize64 vari
13a30 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  able.      ** wi
13a40 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72  ll work for ever
13a50 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a  ything else. */.
13a60 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13a70 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d 31 33  eSerialGet(t<=13
13a80 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64   ? (u8*)&payload
13a90 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c 20 70  Size64 : 0, t, p
13aa0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
13ab0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
13ac0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13ad0 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66  tree(pCrsr, aOff
13ae0 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70  set[p2], len, !p
13af0 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20  C->isTable,.    
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
13b20 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28  Dest);.      if(
13b30 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13b40 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
13b50 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13b60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
13b70 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
13b80 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44  et((const u8*)pD
13b90 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74  est->z, t, pDest
13ba0 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
13bb0 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70  flags &= ~MEM_Ep
13bc0 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  hem;.    }.  }. 
13bd0 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
13be0 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75  coding;..op_colu
13bf0 6d 6e 5f 6f 75 74 3a 0a 20 20 44 65 65 70 68 65  mn_out:.  Deephe
13c00 6d 65 72 61 6c 69 7a 65 28 70 44 65 73 74 29 3b  meralize(pDest);
13c10 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72  .op_column_error
13c20 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
13c30 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
13c40 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
13c50 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
13c60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13c70 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
13c80 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
13c90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
13ca0 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
13cb0 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
13cc0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
13cd0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
13ce0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
13cf0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
13d00 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
13d10 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
13d20 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
13d30 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
13d40 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
13d50 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
13d60 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
13d70 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
13d80 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
13d90 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
13da0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
13db0 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
13dc0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
13dd0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
13de0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
13df0 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
13e00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13e10 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
13e20 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
13e30 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
13e40 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
13e50 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
13e60 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
13e70 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
13e80 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
13e90 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
13ea0 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
13eb0 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
13ec0 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
13ed0 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
13ee0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
13ef0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
13f00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
13f10 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
13f20 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
13f30 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
13f40 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
13f50 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
13f60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13f70 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
13f80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
13f90 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b  nopsis: r[P3]=mk
13fa0 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  rec(r[P1@P2]).**
13fb0 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72  .** Convert P2 r
13fc0 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
13fd0 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20  ng with P1 into 
13fe0 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
13ff0 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20  at].** use as a 
14000 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61  data record in a
14010 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
14020 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69  or as a key.** i
14030 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65  n an index.  The
14040 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
14050 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65  e can decode the
14060 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a   record later..*
14070 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
14080 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
14090 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
140a0 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
140b0 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
140c0 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
140d0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
140e0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
140f0 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
14100 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
14110 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
14120 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
14130 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
14140 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
14150 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
14160 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
14170 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
14180 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
14190 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
141a0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
141b0 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
141c0 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
141d0 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
141e0 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
141f0 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
14200 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
14210 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
14220 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
14230 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
14240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14250 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
14260 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
14270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14280 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14290 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
142a0 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
142b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
142c0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
142d0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
142e0 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
142f0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
14300 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
14310 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
14320 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
14330 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14340 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14350 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14360 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14370 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
14380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14390 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
143a0 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
143b0 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
143c0 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
143d0 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
143e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
143f0 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
14400 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
14410 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
14420 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
14430 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
14440 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
14450 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
14460 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14470 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
14480 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
14490 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
144a0 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
144b0 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
144c0 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
144d0 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
144e0 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
144f0 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
14500 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
14510 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
14520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14530 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14540 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72  wRecord[] header
14550 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14570 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
14580 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65  ewRecord[] conte
14590 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  nt */.  int len;
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
145b0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69  * Length of a fi
145c0 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  eld */..  /* Ass
145d0 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  uming the record
145e0 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c   contains N fiel
145f0 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66  ds, the record f
14600 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a  ormat looks.  **
14610 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a   like this:.  **
14620 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
14670 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c   ** | hdr-size |
14680 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31   type 0 | type 1
14690 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d   | ... | type N-
146a0 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20  1 | data0 | ... 
146b0 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20  | data N-1 | .  
146c0 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
146d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
146e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
146f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
14710 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73  .  ** Data(0) is
14720 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
14730 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31  ster P1.  Data(1
14740 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67  ) comes from reg
14750 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20  ister P1+1.  ** 
14760 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  and so forth..  
14770 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70  **.  ** Each typ
14780 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72  e field is a var
14790 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67  int representing
147a0 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65   the serial type
147b0 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f   of the .  ** co
147c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61  rresponding data
147d0 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71   element (see sq
147e0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
147f0 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a  ype()). The.  **
14800 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20   hdr-size field 
14810 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74  is also a varint
14820 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
14830 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
14840 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20  ginning.  ** of 
14850 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61  the record to da
14860 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74  ta0..  */.  nDat
14870 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
14880 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14890 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
148a0 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20  */.  nHdr = 0;  
148b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
148c0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
148d0 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
148e0 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
148f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14900 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
14910 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14920 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  ord */.  nField 
14930 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66  = pOp->p1;.  zAf
14940 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14950 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46  .z;.  assert( nF
14960 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ield>0 && pOp->p
14970 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
14980 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  Field<=(p->nMem-
14990 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
149a0 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65  .  pData0 = &aMe
149b0 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
149c0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
149d0 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
149e0 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
149f0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
14a00 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
14a10 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66  t;..  /* Identif
14a20 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  y the output reg
14a30 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72  ister */.  asser
14a40 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
14a50 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p1 || pOp->p3>=p
14a60 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29  Op->p1+pOp->p2 )
14a70 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
14a80 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
14a90 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
14aa0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70   pOut);..  /* Ap
14ab0 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65  ply the requeste
14ac0 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c  d affinity to al
14ad0 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20  l inputs.  */.  
14ae0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
14af0 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a  pLast );.  if( z
14b00 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
14b10 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
14b20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70     do{.      app
14b30 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b  lyAffinity(pRec+
14b40 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  +, *(zAffinity++
14b50 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
14b60 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66      assert( zAff
14b70 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70  inity[0]==0 || p
14b80 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  Rec<=pLast );.  
14b90 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
14ba0 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20  ity[0] );.  }.. 
14bb0 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
14bc0 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
14bd0 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
14be0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
14bf0 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
14c00 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
14c10 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
14c20 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
14c30 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
14c40 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
14c50 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14c60 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69  Rec) );.    seri
14c70 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14c80 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14c90 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
14ca0 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
14cb0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14cc0 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
14cd0 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
14ce0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
14cf0 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
14d00 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
14d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14d20 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
14d30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14d40 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
14d50 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
14d60 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
14d70 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
14d80 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
14d90 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
14da0 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
14db0 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
14dc0 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
14dd0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
14de0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
14df0 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
14e00 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
14e10 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
14e20 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d  );.  }while( (--
14e30 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b  pRec)>=pData0 );
14e40 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
14e50 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
14e60 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
14e70 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73  he size */.  tes
14e80 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
14e90 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
14ea0 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
14eb0 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
14ec0 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
14ed0 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
14ee0 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
14ef0 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
14f00 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
14f10 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
14f20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
14f30 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
14f40 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
14f50 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
14f60 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
14f70 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
14f80 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
14f90 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
14fa0 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ata;.  if( nByte
14fb0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
14fc0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
14fd0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
14fe0 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
14ff0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
15000 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
15010 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
15020 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
15030 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
15040 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
15050 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
15060 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
15070 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
15080 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
15090 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
150a0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
150b0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
150c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
150d0 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
150e0 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
150f0 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
15100 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
15110 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
15120 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
15130 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
15140 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
15150 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
15160 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
15170 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
15180 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
15190 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
151a0 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
151b0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
151c0 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
151d0 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
151e0 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
151f0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
15200 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15210 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
15220 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
15230 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
15240 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
15250 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
15260 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
15270 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
15280 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
15290 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
152a0 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
152b0 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
152c0 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
152d0 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
152e0 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
152f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
15300 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
15310 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
15320 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
15330 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
15340 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
15350 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
15360 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
15370 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
15380 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
15390 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
153a0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
153b0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
153c0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
153d0 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
153e0 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
153f0 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
15400 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
15410 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
15420 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
15430 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15440 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
15450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15460 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
15470 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
15480 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
15490 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
154a0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
154b0 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
154c0 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
154d0 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
154e0 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
154f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
15500 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
15510 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
15520 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
15530 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
15540 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
15550 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
15560 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
15570 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  ;..  pCrsr = p->
15580 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
15590 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
155a0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
155b0 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
155c0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
155d0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
155e0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
155f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
15600 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
15610 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e  Entry);.  pOut->
15620 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
15630 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
15640 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
15650 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
15660 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
15670 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
15680 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
15690 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
156a0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
156b0 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
156c0 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
156d0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
156e0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
156f0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
15700 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
15710 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
15720 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
15730 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
15740 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
15750 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
15760 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
15790 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
157a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
157c0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
157d0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
157e0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
157f0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
15800 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
15810 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
15820 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
15830 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
15840 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
15850 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
15860 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
15870 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
15880 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
15890 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
158a0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
158b0 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
158c0 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
158d0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
158e0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
158f0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
15900 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
15910 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
15920 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
15930 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
15940 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15950 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
15960 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
15970 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
15980 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
15990 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
159a0 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
159b0 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
159c0 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
159d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
159e0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
159f0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
15a00 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
15a10 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
15a20 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
15a30 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
15a40 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
15a50 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
15a60 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
15a70 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
15a80 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
15a90 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
15aa0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
15ab0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15ac0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15ad0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15ae0 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
15af0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
15b00 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
15b10 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
15b20 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
15b30 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
15b40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
15b50 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
15b60 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
15b70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15b80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
15b90 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
15ba0 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
15bb0 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
15bc0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
15bd0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
15be0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
15bf0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
15c00 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
15c10 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
15c20 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
15c30 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
15c40 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
15c50 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
15c60 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
15c70 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
15c80 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
15c90 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
15ca0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
15cb0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
15cc0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
15cd0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
15ce0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
15cf0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
15d00 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
15d40 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
15d50 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
15d60 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
15d70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
15d80 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
15d90 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
15da0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
15db0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
15dc0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
15dd0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
15de0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
15df0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
15e00 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
15e10 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
15e20 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
15e30 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
15e40 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
15e50 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
15e60 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
15e70 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
15e80 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
15e90 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
15ea0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
15eb0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
15ec0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
15ed0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
15ee0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
15ef0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
15f00 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
15f10 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
15f20 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15f30 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
15f40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15f50 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
15f60 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
15f70 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
15f80 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
15f90 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
15fa0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
15fb0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
15fc0 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
15fd0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
15fe0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
15ff0 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
16000 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16010 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
16020 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16030 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
16040 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
16050 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
16060 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
16070 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16080 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
16090 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
160a0 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
160b0 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
160c0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
160d0 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
160e0 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
160f0 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
16100 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
16110 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16120 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
16130 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
16140 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
16150 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
16160 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
16170 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
16180 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
16190 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
161a0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
161b0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
161c0 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
161d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
161e0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
161f0 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
16200 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
16210 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
16220 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16230 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
16240 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16250 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16260 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16270 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
16280 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
16290 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
162a0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
162b0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
162c0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
162d0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
162e0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
162f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16300 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
16310 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61     "cannot relea
16320 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  se savepoint - S
16330 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
16340 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20   progress".     
16350 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   );.      rc = S
16360 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16370 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a  }else{..      /*
16380 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
16390 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69  er or not this i
163a0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
163b0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f  savepoint. If so
163c0 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74  ,.      ** and t
163d0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
163e0 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74   command, then t
163f0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
16400 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  action .      **
16410 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a   is committed. .
16420 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
16430 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  nt isTransaction
16440 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16450 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69  Next==0 && db->i
16460 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16470 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28  point;.      if(
16480 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26   isTransaction &
16490 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
164a0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
164b0 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c     if( (rc = sql
164c0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
164d0 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
164e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
164f0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16500 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16510 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16520 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t = 1;.        i
16530 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
16540 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
16550 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  SY ){.          
16560 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
16570 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
16580 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
16590 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
165a0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
165b0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
165c0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
165d0 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
165e0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
165f0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
16600 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
16610 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16620 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
16630 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
16640 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
16650 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
16660 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
16670 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
16680 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
16690 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
166a0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
166b0 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
166c0 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
166d0 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41  i].pBt, SQLITE_A
166e0 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20  BORT);.         
166f0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
16700 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
16710 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
16720 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
16730 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
16740 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
16750 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
16760 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16770 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
16780 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
16790 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
167a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
167b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
167c0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70   }.        if( p
167d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
167e0 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c  LBACK && (db->fl
167f0 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
16800 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a  nChanges)!=0 ){.
16810 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16820 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
16830 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
16840 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16850 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
16860 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
16870 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
16880 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
16890 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
168a0 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
168b0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
168c0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
168d0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
168e0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
168f0 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
16900 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
16910 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
16920 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
16930 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
16940 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
16950 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
16960 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
16970 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
16980 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
16990 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
169a0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
169b0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
169c0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
169d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
169e0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
169f0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
16a00 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
16a10 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
16a20 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
16a30 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
16a40 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
16a50 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
16a60 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
16a70 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
16a80 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
16a90 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
16aa0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
16ab0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
16ac0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
16ad0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
16ae0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
16af0 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
16b00 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
16b10 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
16b20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
16b30 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
16b40 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
16b50 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
16b60 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
16b70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
16b80 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
16b90 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
16ba0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
16bb0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
16bc0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
16bd0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
16be0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
16bf0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16c00 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
16c10 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16c20 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
16c30 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16c40 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
16c50 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
16c60 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
16c70 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
16c80 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
16c90 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
16ca0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16cb0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
16cc0 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
16cd0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
16ce0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
16cf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
16d00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
16d10 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
16d20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16d30 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
16d40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
16d50 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
16d60 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
16d70 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
16d80 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
16d90 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
16da0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
16db0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
16dc0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
16dd0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
16de0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
16df0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
16e00 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
16e10 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
16e20 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
16e30 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
16e40 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
16e50 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
16e60 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
16e70 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
16e80 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
16e90 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
16ea0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
16eb0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
16ec0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
16ed0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
16ee0 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
16ef0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
16f00 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
16f10 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
16f20 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
16f30 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
16f40 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
16f50 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
16f60 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16f70 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
16f80 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
16f90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
16fa0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
16fb0 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
16fc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16fd0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
16fe0 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
16ff0 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
17000 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
17010 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17020 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
17030 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
17040 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17050 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
17060 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
17070 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17080 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
17090 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
170a0 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
170b0 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
170c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
170d0 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
170e0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
170f0 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
17100 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
17110 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
17120 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
17130 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
17140 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
17150 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
17160 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17170 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17180 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17190 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
171a0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
171b0 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
171c0 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
171d0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
171e0 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
171f0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17200 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17210 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
17220 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
17230 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
17240 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17250 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
17260 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17270 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17280 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17290 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
172a0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
172b0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
172c0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
172d0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
172e0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
172f0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17300 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17310 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
17320 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
17330 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17340 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
17350 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
17360 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17370 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
17380 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
17390 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
173a0 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
173b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
173c0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
173d0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
173e0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
173f0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17400 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
17410 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17420 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
17430 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
17440 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
17450 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
17460 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17470 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17480 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
17490 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
174a0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
174b0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
174c0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
174d0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
174e0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
174f0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17500 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
17510 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
17520 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
17530 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
17540 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
17550 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
17560 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17570 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17580 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
17590 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
175a0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
175b0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
175c0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
175d0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
175e0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
175f0 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
17600 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
17610 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
17620 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
17630 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
17640 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
17650 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
17660 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
17670 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17680 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
176a0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
176b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
176c0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
176d0 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
176e0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
176f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17700 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
17710 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
17720 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
17730 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
17740 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
17750 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
17760 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
17770 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
17780 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
17790 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
177a0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
177b0 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
177c0 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
177d0 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
177e0 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
177f0 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
17800 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
17810 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
17820 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
17830 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
17840 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
17850 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
17860 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
17870 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
17880 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
17890 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
178a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
178b0 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
178c0 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
178d0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
178e0 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
178f0 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
17900 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
17910 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
17920 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
17930 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
17940 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
17950 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
17960 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
17970 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
17980 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
17990 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
179a0 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
179b0 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
179c0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
179d0 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
179e0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
179f0 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
17a00 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
17a10 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
17a20 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17a30 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
17a40 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
17a50 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
17a60 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
17a70 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
17a80 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
17a90 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
17aa0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
17ab0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17ac0 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
17ad0 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
17ae0 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
17af0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
17b00 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
17b10 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
17b20 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
17b30 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
17b40 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
17b50 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
17b60 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
17b70 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
17b80 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
17b90 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
17ba0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
17bb0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
17bc0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
17bd0 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
17be0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
17bf0 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
17c00 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
17c10 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
17c20 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
17c30 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
17c40 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
17c50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
17c60 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
17c70 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
17c80 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
17c90 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
17ca0 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
17cb0 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
17cc0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
17cd0 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
17ce0 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
17cf0 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
17d00 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
17d10 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
17d20 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
17d30 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
17d40 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
17d50 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
17d60 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
17d70 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
17d80 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
17d90 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
17da0 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
17db0 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
17dc0 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
17dd0 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
17de0 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
17df0 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
17e00 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
17e10 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
17e20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
17e30 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
17e40 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
17e50 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
17e60 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
17e70 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
17e80 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
17e90 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
17ea0 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
17eb0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
17ec0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
17ed0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17ee0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
17ef0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
17f00 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
17f10 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
17f20 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
17f30 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
17f40 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
17f50 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
17f60 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
17f70 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
17f80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17f90 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
17fa0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
17fb0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
17fc0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
17fd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
17fe0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
17ff0 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
18000 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
18010 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
18020 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
18030 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
18040 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
18050 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18060 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
18070 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18080 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18090 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
180a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
180b0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
180c0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
180d0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
180e0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
180f0 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
18100 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
18110 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
18120 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
18130 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
18140 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
18150 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
18160 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
18170 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
18180 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
18190 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
181a0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
181b0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
181c0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
181d0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
181e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
181f0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
18200 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
18210 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
18220 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
18230 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
18240 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
18250 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18260 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
18270 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
18280 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
18290 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
182a0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
182b0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
182c0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
182d0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
182e0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
182f0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
18300 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
18310 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
18320 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18330 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
18340 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
18350 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
18360 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
18370 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18380 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
18390 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
183a0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
183b0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
183c0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
183d0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
183e0 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
183f0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42   */.    sqlite3B
18400 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
18410 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45   BTREE_SCHEMA_VE
18420 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69  RSION, (u32 *)&i
18430 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20  Meta);.    iGen 
18440 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
18450 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
18460 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65  eration;.  }else
18470 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65  {.    iGen = iMe
18480 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73  ta = 0;.  }.  as
18490 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
184a0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
184b0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
184c0 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69  f( pOp->p5 && (i
184d0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c  Meta!=pOp->p3 ||
184e0 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69   iGen!=pOp->p4.i
184f0 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
18500 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
18510 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
18520 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
18530 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
18540 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
18550 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
18560 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
18570 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
18580 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
18590 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
185a0 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
185b0 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
185c0 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
185d0 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
185e0 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
185f0 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
18600 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
18610 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
18620 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
18630 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
18640 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
18650 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
18660 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
18670 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
18680 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
18690 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
186a0 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
186b0 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
186c0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
186d0 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
186e0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
186f0 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
18700 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
18710 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
18720 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
18730 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
18740 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
18750 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
18760 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
18770 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
18780 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
18790 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
187a0 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
187b0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
187c0 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
187d0 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
187e0 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
187f0 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
18800 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
18810 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
18820 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
18830 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
18840 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
18850 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
18860 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
18870 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
18880 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
18890 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
188a0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69     }.    p->expi
188b0 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
188c0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
188d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
188e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
188f0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
18900 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
18910 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
18920 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
18930 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
18940 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
18950 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
18960 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
18970 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
18980 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
18990 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
189a0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
189b0 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
189c0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
189d0 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
189e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
189f0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
18a00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
18a10 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
18a20 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18a30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
18a40 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
18a50 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
18a60 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
18a70 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
18a80 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
18a90 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
18aa0 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
18ab0 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
18ac0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
18ad0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
18ae0 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
18af0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
18b00 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
18b10 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
18b20 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
18b30 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
18b40 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18b50 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
18b60 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
18b70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
18b80 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
18b90 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
18ba0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
18bb0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
18bc0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
18bd0 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
18be0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
18bf0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
18c00 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
18c10 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
18c20 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
18c30 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
18c40 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
18c50 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
18c60 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
18c70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
18c80 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
18c90 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
18ca0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
18cb0 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72  gister P3 (inter
18cc0 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74  preted as an int
18cd0 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f  eger).** into co
18ce0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
18cf0 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  f database P1.  
18d00 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
18d10 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a  ema version.  .*
18d20 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64  * P2==2 is the d
18d30 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20  atabase format. 
18d40 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
18d50 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
18d60 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
18d70 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
18d80 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
18d90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
18da0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
18db0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
18dc0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
18dd0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18de0 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
18df0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
18e00 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
18e10 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
18e20 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
18e30 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  tCookie: {      
18e40 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20   /* in3 */.  Db 
18e50 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
18e60 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
18e70 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
18e80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18e90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
18ea0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18eb0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
18ec0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
18ed0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
18ee0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
18ef0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
18f00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
18f10 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
18f20 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
18f30 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
18f40 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
18f50 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
18f60 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
18f70 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
18f80 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
18f90 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
18fa0 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
18fb0 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
18fc0 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
18fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18fe0 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
18ff0 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
19000 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
19010 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
19020 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19030 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
19040 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
19050 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
19060 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
19070 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
19080 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
19090 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
190a0 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
190b0 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
190c0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
190d0 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
190e0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
190f0 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
19100 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
19110 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
19120 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
19130 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
19140 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
19150 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
19160 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
19170 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
19180 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
19190 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
191a0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
191b0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
191c0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
191d0 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
191e0 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
191f0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
19200 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
19210 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
19220 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
19230 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19240 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
19250 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
19260 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
19270 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
19280 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
19290 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
192a0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
192b0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
192c0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
192d0 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
192e0 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
192f0 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
19300 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
19310 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19320 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
19330 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
19340 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
19350 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
19360 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
19370 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
19380 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
19390 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
193a0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
193b0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
193c0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
193d0 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
193e0 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
193f0 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
19400 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
19410 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
19420 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
19430 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
19440 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19450 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
19460 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
19470 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
19480 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
19490 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
194a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
194b0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
194c0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
194d0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
194e0 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
194f0 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
19500 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
19510 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
19520 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
19530 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
19540 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
19550 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
19560 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
19570 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
19580 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
19590 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
195a0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
195b0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
195c0 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
195d0 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
195e0 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
195f0 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
19600 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
19610 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
19620 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
19630 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
19640 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
19650 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
19660 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
19670 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
19680 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
19690 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
196a0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
196b0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
196c0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
196d0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
196e0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
196f0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19700 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19710 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19720 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19730 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19740 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19750 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19760 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
19770 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
19780 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
19790 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
197a0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
197b0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
197c0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
197d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
197e0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
197f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
19800 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
19810 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
19820 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
19830 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
19840 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
19850 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
19860 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
19870 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
19880 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
19890 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
198a0 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
198b0 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
198c0 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
198d0 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
198e0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
198f0 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
19900 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
19910 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
19920 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
19930 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
19940 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
19950 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
19960 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
19970 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
19980 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
19990 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
199a0 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
199b0 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
199c0 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
199d0 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
199e0 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
199f0 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
19a00 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
19a10 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
19a20 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
19a30 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
19a40 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
19a50 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
19a60 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
19a70 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
19a80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
19a90 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
19aa0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19ab0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19ac0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19ad0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
19ae0 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
19af0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
19b00 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
19b10 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
19b20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
19b30 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19b40 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
19b50 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
19b60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
19b70 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
19b80 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
19b90 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
19ba0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
19bb0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
19bc0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
19bd0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
19be0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
19bf0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
19c00 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
19c10 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
19c20 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
19c30 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
19c40 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
19c50 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
19c60 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
19c70 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
19c80 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
19c90 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
19ca0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
19cb0 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
19cc0 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
19cd0 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
19ce0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
19cf0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
19d00 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
19d10 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
19d20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
19d30 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
19d40 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
19d50 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
19d60 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
19d70 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
19d80 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
19d90 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
19da0 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
19db0 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
19dc0 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
19dd0 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
19de0 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
19df0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
19e00 65 6e 49 64 78 3a 20 7b 0a 20 20 56 64 62 65 43  enIdx: {.  VdbeC
19e10 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
19e20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
19e30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19e40 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
19e50 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
19e60 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
19e70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
19e80 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
19e90 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
19ea0 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
19eb0 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
19ec0 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
19ed0 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
19ee0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
19ef0 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  */.    break;.  
19f00 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  }.  /* If the cu
19f10 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72  rsor is not curr
19f20 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73  ently open or is
19f30 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65   open on a diffe
19f40 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c  rent.  ** index,
19f50 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
19f60 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52  gh into OP_OpenR
19f70 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72  ead to force a r
19f80 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20  eopen */.}.case 
19f90 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
19fa0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
19fb0 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
19fc0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
19fd0 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
19fe0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
19ff0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1a000 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1a010 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1a020 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28  Db;..  assert( (
1a030 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f  pOp->p5&(OPFLAG_
1a040 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42  P2ISREG|OPFLAG_B
1a050 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70  ULKCSR))==pOp->p
1a060 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  5 );.  assert( p
1a070 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a080 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1a090 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p5==0 );.  asse
1a0a0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a0b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a0c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a0d0 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f  enRead || pOp->o
1a0e0 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e  pcode==OP_Reopen
1a0f0 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c  Idx.          ||
1a100 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1a110 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
1a120 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
1a130 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20   SQLITE_ABORT;. 
1a140 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
1a150 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1a160 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1a170 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1a180 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1a190 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1a1a0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1a1b0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a1c0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a1d0 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1a1e0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1a1f0 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1a200 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1a210 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1a220 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a230 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
1a240 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
1a250 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1a260 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1a270 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1a280 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1a290 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1a2a0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1a2b0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1a2c0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a2d0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1a2e0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a2f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1a300 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1a310 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1a320 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1a330 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1a340 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1a350 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1a360 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1a370 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1a380 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1a390 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1a3a0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1a3b0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1a3c0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1a3d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1a3e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1a3f0 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1a400 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1a410 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1a420 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1a430 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1a440 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1a450 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1a460 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1a470 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1a480 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1a490 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1a4a0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1a4b0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1a4c0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1a4d0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1a4e0 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1a4f0 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1a500 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a510 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1a520 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1a530 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a540 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1a550 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a560 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a570 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1a580 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1a590 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1a5a0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1a5b0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1a5c0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1a5d0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1a5e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1a5f0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1a600 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1a610 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1a620 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1a630 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1a640 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1a650 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1a660 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1a670 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1a680 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1a690 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1a6a0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1a6b0 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1a6c0 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1a6d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1a6e0 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1a6f0 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1a700 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1a710 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1a720 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1a730 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1a740 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1a750 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1a760 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1a770 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1a780 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71   = p2;.  rc = sq
1a790 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1a7a0 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1a7b0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1a7c0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
1a7d0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1a7e0 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1a7f0 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1a800 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1a810 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72   );.  sqlite3Btr
1a820 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43  eeCursorHints(pC
1a830 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f  ur->pCursor, (pO
1a840 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1a850 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20  ULKCSR));..  /* 
1a860 53 69 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d  Since it perform
1a870 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s no memory allo
1a880 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68  cation or IO, th
1a890 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68 61  e only value tha
1a8a0 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74  t.  ** sqlite3Bt
1a8b0 72 65 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20  reeCursor() may 
1a8c0 72 65 74 75 72 6e 20 69 73 20 53 51 4c 49 54 45  return is SQLITE
1a8d0 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  _OK. */.  assert
1a8e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1a8f0 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  );..  /* Set the
1a900 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1a910 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1a920 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1a930 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1a940 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1a950 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1a960 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1a970 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1a980 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1a990 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1a9a0 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1a9b0 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1a9c0 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1a9d0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1a9e0 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1a9f0 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1aa00 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1aa10 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 62  =P4_KEYINFO;.  b
1aa20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1aa30 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
1aa40 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  l P1 P2 * P4 P5.
1aa50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1aa60 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70  lumn=P2.**.** Op
1aa70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1aa80 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
1aa90 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
1aaa0 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
1aab0 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
1aac0 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
1aad0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1aae0 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
1aaf0 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a  The ephemeral.**
1ab00 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
1ab10 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
1ab20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
1ab30 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
1ab40 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
1ab50 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1ab60 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
1ab70 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1ab80 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
1ab90 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
1aba0 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
1abb0 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
1abc0 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
1abd0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1abe0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
1abf0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1ac00 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
1ac10 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
1ac20 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
1ac30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70  ..**.** The P5 p
1ac40 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20  arameter can be 
1ac50 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54  a mask of the BT
1ac60 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69  REE_* flags defi
1ac70 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e  ned.** in btree.
1ac80 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20  h.  These flags 
1ac90 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20  control aspects 
1aca0 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
1acb0 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65   of.** the btree
1acc0 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49  .  The BTREE_OMI
1acd0 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54  T_JOURNAL and BT
1ace0 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73  REE_SINGLE flags
1acf0 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75   are.** added au
1ad00 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
1ad10 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41  /* Opcode: OpenA
1ad20 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a  utoindex P1 P2 *
1ad30 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1ad40 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1ad50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ad60 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1ad70 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1ad80 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
1ad90 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
1ada0 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
1adb0 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
1adc0 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
1add0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1ade0 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
1adf0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1ae00 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
1ae10 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
1ae20 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
1ae30 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
1ae40 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
1ae50 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
1ae60 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b  Cursor *pCx;.  K
1ae70 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1ae80 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
1ae90 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d  t int vfsFlags =
1aea0 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f   .      SQLITE_O
1aeb0 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a  PEN_READWRITE |.
1aec0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1aed0 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20  N_CREATE |.     
1aee0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43   SQLITE_OPEN_EXC
1aef0 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53  LUSIVE |.      S
1af00 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54  QLITE_OPEN_DELET
1af10 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20  EONCLOSE |.     
1af20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41   SQLITE_OPEN_TRA
1af30 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73  NSIENT_DB;.  ass
1af40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1af50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1af60 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1af70 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1af80 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1af90 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1afa0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1afb0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1afc0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1afd0 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1afe0 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  l = 1;.  rc = sq
1aff0 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1b000 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1b010 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1b040 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1b050 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1b060 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1b070 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b080 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1b090 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1b0a0 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1b0b0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1b0c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b0d0 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1b0e0 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1b0f0 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1b100 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1b110 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1b120 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1b130 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1b140 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1b150 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1b160 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1b170 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1b180 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1b190 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1b1a0 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1b1b0 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1b1c0 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1b1d0 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1b1e0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79  */.    if( (pKey
1b1f0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1b200 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1b210 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1b220 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1b230 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b240 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1b250 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1b260 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1b270 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1b280 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1b290 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1b2a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1b2b0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1b2c0 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1b2d0 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1b2e0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b2f0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1b300 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b310 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1b320 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1b330 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1b340 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1b350 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b360 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1b370 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79  t, pgno, 1, pKey
1b380 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73  Info, pCx->pCurs
1b390 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1b3a0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1b3b0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1b3c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b3d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1b3e0 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
1b3f0 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
1b400 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1b410 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1b420 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
1b430 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
1b440 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
1b450 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65  NORDERED);.  bre
1b460 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b470 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20  : SorterOpen P1 
1b480 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1b490 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1b4a0 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1b4b0 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1b4c0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1b4d0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1b4e0 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1b4f0 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1b500 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1b510 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1b520 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1b530 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1b540 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65  .**.** If argume
1b550 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  nt P3 is non-zer
1b560 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63  o, then it indic
1b570 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f  ates that the so
1b580 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75  rter may.** assu
1b590 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65  me that a stable
1b5a0 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e   sort considerin
1b5b0 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66  g the first P3 f
1b5c0 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a  ields of each.**
1b5d0 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65   key is sufficie
1b5e0 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68  nt to produce th
1b5f0 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c  e required resul
1b600 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
1b610 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1b620 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1b630 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b640 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1b650 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1b660 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1b670 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1b680 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1b690 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   1);.  if( pCx==
1b6a0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1b6b0 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1b6c0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1b6d0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1b6e0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1b6f0 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1b700 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1b710 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1b720 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1b730 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1b740 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
1b750 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b760 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1b770 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Test P1 P2 * * *
1b780 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
1b790 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ( cursor[P1].ctr
1b7a0 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a  ++ ) pc = P2.**.
1b7b0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
1b7c0 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65  r cursor. If the
1b7d0 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   sequence counte
1b7e0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
1b7f0 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  ero, jump.** to 
1b800 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  P2. Regardless o
1b810 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
1b820 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
1b830 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  en, increment th
1b840 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63  e.** the sequenc
1b850 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  e value..*/.case
1b860 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74   OP_SequenceTest
1b870 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1b880 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1b890 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1b8a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1b8b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1b8c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1b8d0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f 72  assert( pC->pSor
1b8e0 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70 43  ter );.  if( (pC
1b8f0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30  ->seqCount++)==0
1b900 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1b910 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1b920 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b930 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1b940 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1b950 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1b960 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1b970 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1b980 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1b990 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1b9a0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1b9b0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1b9c0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1b9d0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1b9e0 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1b9f0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1ba00 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1ba10 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1ba20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1ba30 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1ba40 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1ba50 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1ba60 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1ba70 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1ba80 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1ba90 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1baa0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1bab0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1bac0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1bad0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1bae0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1baf0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1bb00 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1bb10 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1bb20 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1bb30 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1bb40 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1bb50 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1bb60 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1bb70 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1bb80 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1bb90 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1bba0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1bbb0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1bbc0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1bbd0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1bbe0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1bbf0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1bc00 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1bc10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1bc20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bc30 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1bc40 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1bc50 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1bc60 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  ->p3, -1, 0);.  
1bc70 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1bc80 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1bc90 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1bca0 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  pCx->pseudoTable
1bcb0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1bcc0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1bcd0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1bce0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1bcf0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1bd00 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1bd10 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1bd20 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1bd30 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1bd40 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1bd50 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1bd60 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1bd70 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1bd80 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1bd90 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1bda0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1bdb0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1bdc0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1bdd0 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1bde0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1bdf0 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1be00 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1be10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1be20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20  SeekGE P1 P2 P3 
1be30 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1be40 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1be50 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1be60 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1be70 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1be80 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1be90 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1bea0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1beb0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
1bec0 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
1bed0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1bee0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1bef0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1bf00 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1bf10 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1bf20 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1bf30 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1bf40 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1bf50 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1bf60 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1bf70 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1bf80 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1bf90 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1bfa0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1bfb0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1bfc0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1bfd0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1bfe0 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
1bff0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c000 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1c010 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1c020 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1c030 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1c040 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1c050 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1c060 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1c070 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1c080 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1c090 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1c0a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1c0b0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1c0c0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1c0d0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1c0e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1c0f0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1c100 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1c110 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1c120 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50  : SeekGT P1 P2 P
1c130 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1c140 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1c150 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1c160 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1c170 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1c180 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1c190 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1c1a0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1c1b0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1c1c0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1c1d0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1c1e0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1c1f0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1c200 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1c210 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1c220 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1c230 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1c240 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1c250 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1c260 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1c270 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1c280 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1c290 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1c2a0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1c2b0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1c2c0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1c2d0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1c2e0 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1c2f0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c300 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c310 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c320 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1c330 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1c340 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1c350 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1c360 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1c370 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1c380 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1c390 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1c3a0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1c3b0 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1c3c0 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1c3d0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c3e0 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1c3f0 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1c400 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20   Opcode: SeekLT 
1c410 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1c420 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1c430 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1c440 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c450 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1c460 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1c470 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1c480 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1c490 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1c4a0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1c4b0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c4c0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c4d0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c4e0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c4f0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c500 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c510 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c520 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c530 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c540 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c550 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c560 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1c570 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1c580 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1c590 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c5a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c5b0 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1c5c0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1c5d0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1c5e0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1c5f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1c600 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1c610 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1c620 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1c630 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1c640 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1c650 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1c660 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1c670 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1c680 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1c690 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1c6a0 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1c6b0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1c6c0 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1c6d0 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1c6e0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45  * Opcode: SeekLE
1c6f0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1c700 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1c710 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1c720 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c730 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1c740 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1c750 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1c760 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1c770 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1c780 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1c790 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c7a0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c7b0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c7c0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c7d0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c7e0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c7f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c800 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c810 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c820 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c830 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1c840 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1c850 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1c860 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1c870 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1c880 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1c890 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1c8a0 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1c8b0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1c8c0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1c8d0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1c8e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1c8f0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1c900 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1c910 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1c920 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1c930 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1c940 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1c950 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1c960 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1c970 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1c980 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1c990 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1c9a0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1c9b0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1c9c0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1c9d0 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
1c9e0 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLT:         /*
1c9f0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1ca00 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20  se OP_SeekLE:   
1ca10 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1ca20 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
1ca30 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGE:         /*
1ca40 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1ca50 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20  se OP_SeekGT: { 
1ca60 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1ca70 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
1ca80 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62  .  int oc;.  Vdb
1ca90 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55  eCursor *pC;.  U
1caa0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1cab0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1cac0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1cad0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1cae0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1caf0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1cb00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1cb10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1cb20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cb30 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1cb40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1cb50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1cb60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1cb70 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
1cb80 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
1cb90 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20  t( OP_SeekLE == 
1cba0 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20  OP_SeekLT+1 );. 
1cbb0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1cbc0 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GE == OP_SeekLT+
1cbd0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  2 );.  assert( O
1cbe0 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53  P_SeekGT == OP_S
1cbf0 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73  eekLT+3 );.  ass
1cc00 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
1cc10 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
1cc20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1cc30 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1cc40 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  code;.  pC->null
1cc50 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  Row = 0;.#ifdef 
1cc60 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1cc70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
1cc80 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
1cc90 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1cca0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1ccb0 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1ccc0 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1ccd0 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1cce0 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1ccf0 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1cd00 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1cd10 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1cd20 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1cd30 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20  n do.    ** the 
1cd40 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74  seek, so convert
1cd50 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33   it. */.    pIn3
1cd60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1cd70 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  ];.    if( (pIn3
1cd80 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
1cd90 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
1cda0 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
1cdb0 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1cdc0 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
1cdd0 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1cde0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1cdf0 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  n3);.    pC->row
1ce00 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1ce10 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1ce20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1ce30 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1ce40 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1ce50 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
1ce60 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1ce70 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1ce80 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1ce90 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1cea0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1ceb0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1cec0 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
1ced0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1cee0 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1cef0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1cf00 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1cf10 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1cf20 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1cf30 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
1cf40 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1cf50 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1cf60 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1cf70 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1cf80 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p2 - 1;  VdbeB
1cf90 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1cfa0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1cfb0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1cfc0 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1cfd0 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
1cfe0 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
1cff0 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1d000 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1d010 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
1d020 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
1d030 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
1d040 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
1d050 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
1d060 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
1d070 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
1d080 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
1d090 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
1d0a0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
1d0b0 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
1d0c0 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
1d0d0 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
1d0e0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1d0f0 69 66 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75  if( pIn3->r<(dou
1d100 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1d110 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1d120 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGE==(OP_SeekG
1d130 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T-1) );.        
1d140 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1d150 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29  T==(OP_SeekLE-1)
1d160 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d170 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26  rt( (OP_SeekLE &
1d180 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1d190 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1d1a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1d1b0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1d1c0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1d1d0 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
1d1e0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1d1f0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1d200 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
1d210 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1d220 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1d230 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1d240 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
1d250 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
1d260 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
1d270 20 70 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65   pIn3->r>(double
1d280 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1d290 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1d2a0 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
1d2b0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1d2c0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
1d2d0 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
1d2e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d2f0 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
1d300 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1d310 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
1d320 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1d330 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1d340 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
1d350 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
1d360 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
1d370 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d380 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1d390 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1d3a0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1d3b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1d3c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1d3d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d3e0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
1d3f0 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1d400 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1d410 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1d420 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1d430 20 69 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d   iKey;.    }.  }
1d440 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64  else{.    nField
1d450 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1d460 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d470 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1d480 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
1d490 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
1d4a0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1d4b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1d4c0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1d4d0 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
1d4e0 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1d4f0 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1d500 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1d510 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
1d520 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
1d530 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1d540 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
1d550 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
1d560 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
1d570 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
1d580 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
1d590 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
1d5a0 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
1d5b0 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
1d5c0 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
1d5d0 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
1d5e0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d5f0 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
1d600 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1d610 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d620 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
1d630 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
1d640 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1d650 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
1d660 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
1d670 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1d680 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
1d690 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
1d6a0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
1d6b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
1d6c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1d6d0 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1d6e0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1d6f0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1d700 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1d710 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1d720 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  f.    ExpandBlob
1d730 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63  (r.aMem);.    rc
1d740 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1d750 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1d760 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30  ->pCursor, &r, 0
1d770 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1d780 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1d790 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1d7a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d7b0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43  or;.    }.    pC
1d7c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d7d0 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65   0;.  }.  pC->de
1d7e0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1d7f0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1d800 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1d810 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  E;.#ifdef SQLITE
1d820 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
1d830 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
1d840 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e  #endif.  if( oc>
1d850 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61  =OP_SeekGE ){  a
1d860 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1d870 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGE || oc==OP_S
1d880 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28  eekGT );.    if(
1d890 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1d8a0 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1d8b0 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73  GT) ){.      res
1d8c0 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
1d8d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1d8e0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1d8f0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1d900 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1d910 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d920 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70  o_error;.      p
1d930 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d940 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1d950 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1d960 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1d970 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
1d980 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
1d990 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
1d9a0 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
1d9b0 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1d9c0 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
1d9d0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
1d9e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d9f0 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75  Previous(pC->pCu
1da00 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1da10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1da20 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1da30 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1da40 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1da50 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1da60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
1da70 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
1da80 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
1da90 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
1daa0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
1dab0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1dac0 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1dad0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
1dae0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1daf0 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1db00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1db10 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1db20 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
1db30 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
1db40 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1db50 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1db60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1db70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1db80 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  k P1 P2 * * *.**
1db90 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b   Synopsis:  intk
1dba0 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P2].**.** P
1dbb0 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62  1 is an open tab
1dbc0 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32  le cursor and P2
1dbd0 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65   is a rowid inte
1dbe0 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a  ger.  Arrange.**
1dbf0 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20   for P1 to move 
1dc00 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1dc10 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67  s to the rowid g
1dc20 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a  iven by P2..**.*
1dc30 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c  * This is actual
1dc40 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65  ly a deferred se
1dc50 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
1dc60 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
1dc70 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
1dc80 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
1dc90 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
1dca0 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
1dcb0 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
1dcc0 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
1dcd0 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65  happens..*/.case
1dce0 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f   OP_Seek: {    /
1dcf0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
1dd00 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
1dd10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1dd20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1dd30 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1dd40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1dd50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1dd60 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1dd70 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1dd80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1dd90 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43  >isTable );.  pC
1dda0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1ddb0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
1ddc0 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f  p->p2];.  pC->mo
1ddd0 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c  vetoTarget = sql
1dde0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1ddf0 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f  (pIn2);.  pC->ro
1de00 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1de10 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1de20 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61  veto = 1;.  brea
1de30 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1de40 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1de50 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1de60 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1de70 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1de80 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1de90 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1dea0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1deb0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1dec0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1ded0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1dee0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1def0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1df00 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1df10 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
1df20 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1df30 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1df40 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1df50 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1df60 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
1df70 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1df80 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1df90 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
1dfa0 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
1dfb0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
1dfc0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1dfd0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1dfe0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1dff0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1e000 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
1e010 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
1e020 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
1e030 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
1e040 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
1e050 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
1e060 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
1e070 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
1e080 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e090 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
1e0a0 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
1e0b0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1e0c0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1e0d0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e0e0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e0f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1e100 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e110 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1e120 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1e130 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1e140 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1e150 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1e160 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1e170 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1e180 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1e190 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1e1a0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1e1b0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1e1c0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1e1d0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1e1e0 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1e1f0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e200 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e210 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e220 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1e230 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1e240 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1e250 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1e260 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1e270 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1e280 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1e290 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1e2a0 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1e2b0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1e2c0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1e2d0 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
1e2e0 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
1e2f0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
1e300 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
1e310 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
1e320 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
1e330 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
1e340 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
1e350 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
1e360 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
1e370 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
1e380 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
1e390 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e3a0 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
1e3b0 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  nflict.*/./* Opc
1e3c0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
1e3d0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e3e0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e3f0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e400 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1e410 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1e420 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1e430 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1e440 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1e450 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1e460 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1e470 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1e480 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1e490 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
1e4a0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
1e4b0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
1e4c0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
1e4d0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
1e4e0 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
1e4f0 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
1e500 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
1e510 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1e520 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
1e530 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
1e540 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
1e550 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
1e560 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
1e570 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
1e580 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
1e590 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
1e5a0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
1e5b0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
1e5c0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
1e5d0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1e5e0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
1e5f0 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
1e600 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
1e610 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
1e620 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
1e630 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
1e640 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
1e650 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
1e660 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
1e670 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
1e680 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
1e690 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
1e6a0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
1e6b0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
1e6c0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
1e6d0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1e6e0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1e6f0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1e700 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
1e710 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
1e720 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
1e730 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e740 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
1e750 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
1e760 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
1e770 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
1e780 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e790 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
1e7a0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
1e7b0 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  ase OP_NoConflic
1e7c0 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  t:     /* jump, 
1e7d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
1e7e0 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
1e7f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e800 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
1e810 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e820 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72  in3 */.  int alr
1e830 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e  eadyExists;.  in
1e840 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73  t ii;.  VdbeCurs
1e850 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
1e860 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65  s;.  char *pFree
1e870 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1e880 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
1e890 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1e8a0 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63  .  char aTempRec
1e8b0 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55  [ROUND8(sizeof(U
1e8c0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20  npackedRecord)) 
1e8d0 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20  + sizeof(Mem)*4 
1e8e0 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  + 7];..#ifdef SQ
1e8f0 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
1e900 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
1e910 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
1e920 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1e930 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
1e940 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e950 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e960 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e970 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1e980 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
1e990 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e9a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e9b0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
1e9c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1e9d0 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
1e9e0 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
1e9f0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1ea00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1ea10 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1ea20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ea30 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1ea40 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20  ;.  pFree = 0;  
1ea50 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
1ea60 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70  Only used to sup
1ea70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72  press a compiler
1ea80 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69   warning. */.  i
1ea90 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1eaa0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
1eab0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1eac0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1ead0 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1eae0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1eaf0 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  3;.    for(ii=0;
1eb00 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1eb10 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
1eb20 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1eb30 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
1eb40 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26      ExpandBlob(&
1eb50 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66  r.aMem[ii]);.#if
1eb60 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1eb70 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
1eb80 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1eb90 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
1eba0 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a  em[ii]);.#endif.
1ebb0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
1ebc0 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b  y = &r;.  }else{
1ebd0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
1ebe0 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
1ebf0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20  npackedRecord(. 
1ec00 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49         pC->pKeyI
1ec10 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73  nfo, aTempRec, s
1ec20 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c  izeof(aTempRec),
1ec30 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20 0a   &pFree.    ); .
1ec40 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1ec50 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ec60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
1ec70 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1ec80 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65  Blob );.    asse
1ec90 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
1eca0 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
1ecb0 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73  );  /* zeroblobs
1ecc0 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64 65   already expande
1ecd0 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  d */.    sqlite3
1ece0 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1ecf0 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1ed00 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1ed10 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
1ed20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
1ed30 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28 20  t_rc = 0;.  if( 
1ed40 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1ed50 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
1ed60 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
1ed70 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
1ed80 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
1ed90 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
1eda0 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
1edb0 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
1edc0 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
1edd0 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
1ede0 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
1edf0 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
1ee00 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1ee10 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  ++){.      if( r
1ee20 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
1ee30 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1ee40 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1ee50 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e  p2 - 1; VdbeBran
1ee60 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
1ee70 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ee80 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
1ee90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1eea0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1eeb0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1eec0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1eed0 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  s);.  if( pOp->p
1eee0 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  4.i==0 ){.    sq
1eef0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
1ef00 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66  pFree);.  }.  if
1ef10 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1ef20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
1ef30 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
1ef40 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65  lt = res;.  alre
1ef50 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1ef60 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ==0);.  pC->null
1ef70 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45  Row = 1-alreadyE
1ef80 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66  xists;.  pC->def
1ef90 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1efa0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1efb0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1efc0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1efd0 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
1efe0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
1eff0 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73  aken(alreadyExis
1f000 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
1f010 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1f020 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1f030 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1f040 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f050 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d  (alreadyExists==
1f060 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61  0,2);.    if( !a
1f070 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70  lreadyExists ) p
1f080 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1f090 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f0a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45  ./* Opcode: NotE
1f0b0 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a  xists P1 P2 P3 *
1f0c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f0d0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
1f0e0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1f0f0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
1f100 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
1f110 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
1f120 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
1f130 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65  .  P3 is an inte
1f140 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50  ger rowid.  If P
1f150 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  1 does not conta
1f160 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
1f170 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65  .** rowid P3 the
1f180 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
1f190 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  ly to P2.  If P1
1f1a0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
1f1b0 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72  record.** with r
1f1c0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61  owid P3 then lea
1f1d0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
1f1e0 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
1f1f0 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a  ecord and fall.*
1f200 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  * through to the
1f210 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1f220 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
1f230 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
1f240 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
1f250 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
1f260 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
1f270 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
1f280 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
1f290 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f2a0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f2b0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1f2c0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1f2d0 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
1f2e0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1f2f0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1f300 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1f310 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
1f320 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
1f330 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
1f340 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
1f350 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1f360 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1f370 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ict.*/.case OP_N
1f380 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1f390 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f3a0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1f3b0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
1f3c0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
1f3d0 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
1f3e0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1f3f0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1f400 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1f410 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1f420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1f440 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f450 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f460 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1f470 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
1f480 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1f490 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e  >seekOp = 0;.#en
1f4a0 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
1f4b0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
1f4c0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1f4d0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1f4e0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
1f4f0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
1f500 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
1f510 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
1f520 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
1f530 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1f540 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1f550 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
1f560 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61   &res);.  pC->la
1f570 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e  stRowid = pIn3->
1f580 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  u.i;.  pC->rowid
1f590 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30  IsValid = res==0
1f5a0 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c   ?1:0;.  pC->nul
1f5b0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
1f5c0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f5d0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
1f5e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1f5f0 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
1f600 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1f610 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
1f620 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1f630 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65  p2 - 1;.    asse
1f640 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1f650 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20  alid==0 );.  }. 
1f660 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1f670 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a  = res;.  break;.
1f680 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1f690 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
1f6a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f6b0 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
1f6c0 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
1f6d0 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1f6e0 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1f6f0 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1f700 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1f710 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f720 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1f730 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1f740 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1f750 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1f760 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1f770 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1f780 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1f790 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1f7a0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1f7b0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1f7c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f7d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f7e0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1f7f0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1f800 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1f810 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1f820 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1f830 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1f840 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1f850 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1f860 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1f870 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
1f880 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1f890 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1f8a0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1f8b0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1f8c0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1f8d0 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1f8e0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1f8f0 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1f900 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1f910 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1f920 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1f930 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1f940 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1f950 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1f960 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1f970 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1f980 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1f990 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1f9a0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1f9b0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1f9c0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1f9d0 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1f9e0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1f9f0 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1fa00 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1fa10 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1fa20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1fa30 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1fa40 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1fa50 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1fa60 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
1fa70 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
1fa80 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
1fa90 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
1faa0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
1fab0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1fac0 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
1fad0 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
1fae0 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
1faf0 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
1fb00 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
1fb10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
1fb20 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1fb30 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1fb40 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b  ease */.  i64 v;
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
1fb70 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1fb80 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
1fb90 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
1fba0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
1fbb0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
1fbc0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
1fbd0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
1fbe0 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
1fbf0 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
1fc00 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fc10 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
1fc20 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
1fc30 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
1fc40 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
1fc50 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1fc60 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
1fc70 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
1fc80 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
1fc90 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
1fca0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
1fcb0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
1fcc0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
1fcd0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1fce0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1fcf0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1fd00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1fd10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1fd20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1fd30 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d  .  if( NEVER(pC-
1fd40 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a  >pCursor==0) ){.
1fd50 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
1fd60 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
1fd70 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
1fd80 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
1fd90 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1fda0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
1fdb0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
1fdc0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
1fdd0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
1fde0 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
1fdf0 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
1fe00 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
1fe10 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
1fe20 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
1fe30 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
1fe40 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
1fe50 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
1fe60 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
1fe70 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
1fe80 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1fe90 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
1fea0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
1feb0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
1fec0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
1fed0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
1fee0 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
1fef0 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
1ff00 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
1ff10 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
1ff20 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
1ff30 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
1ff40 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
1ff50 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
1ff60 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
1ff70 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
1ff80 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
1ff90 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
1ffa0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
1ffb0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
1ffc0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
1ffd0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
1ffe0 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
1fff0 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
20000 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
20010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20020 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
20030 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
20040 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
20050 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
20060 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
20070 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
20080 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
20090 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
200a0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
200b0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
200c0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
200d0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
200e0 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
200f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
20100 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
20110 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
20120 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
20130 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
20140 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
20150 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
20160 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
20170 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
20180 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
20190 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
201a0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
201b0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
201c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
201d0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
201e0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
201f0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
20200 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
20210 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20220 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
20230 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
20240 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
20250 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
20260 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
20270 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20280 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
20290 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
202a0 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  alid(pC->pCursor
202b0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
202c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
202d0 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
202e0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
202f0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
20300 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
20310 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
20320 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
20330 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
20340 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
20350 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
20360 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
20370 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
20380 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
20390 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
203a0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
203b0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
203c0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
203d0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
203e0 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
203f0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
20400 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20410 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20420 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20430 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20440 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
20450 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
20460 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
20470 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
20480 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
20490 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
204a0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
204b0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
204c0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
204d0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
204e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
204f0 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
20500 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
20510 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
20520 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
20530 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
20540 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20550 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
20560 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
20570 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20580 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
20590 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
205a0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
205b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
205c0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
205d0 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
205e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
205f0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
20600 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
20610 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
20620 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
20630 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
20640 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
20650 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
20660 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
20670 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
20680 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
20690 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
206a0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
206b0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
206c0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
206d0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
206e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
206f0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
20700 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
20710 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20720 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20730 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
20740 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
20750 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
20760 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
20770 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
20780 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
20790 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
207a0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
207b0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
207c0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
207d0 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
207e0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
207f0 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
20800 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
20810 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
20820 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
20830 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
20840 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
20850 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
20860 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
20870 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
20880 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
20890 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
208a0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
208b0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
208c0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
208d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
208e0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
208f0 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
20900 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
20910 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20930 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
20940 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
20950 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e  . */.      /* on
20960 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d   the first attem
20970 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e  pt, simply do on
20980 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76  e more than prev
20990 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  ious */.      v 
209a0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  = lastRowid;.   
209b0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
209c0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
209d0 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
209e0 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
209f0 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
20a00 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
20a10 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
20a20 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
20a30 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20a40 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
20a50 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
20a60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
20aa0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
20ab0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
20ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
20ad0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
20ae0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
20af0 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
20b00 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
20b10 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
20b20 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
20b30 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
20b40 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
20b50 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
20b60 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
20b70 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
20b80 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
20b90 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
20ba0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
20bb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20bc0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
20bd0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
20be0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
20bf0 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20c00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
20c10 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20c20 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
20c30 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
20c40 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
20c50 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
20c60 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
20c70 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
20c80 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
20c90 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20ca0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20cb0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
20cc0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
20cd0 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
20ce0 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
20cf0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20d00 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
20d10 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20d20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20d30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20d40 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
20d50 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
20d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
20d70 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
20d80 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
20d90 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
20da0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
20db0 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
20dc0 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
20dd0 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
20de0 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
20df0 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
20e00 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
20e10 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
20e20 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
20e30 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
20e40 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
20e50 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
20e60 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
20e70 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
20e80 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
20e90 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
20ea0 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
20eb0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
20ec0 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
20ed0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
20ee0 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
20ef0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
20f00 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
20f10 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
20f20 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
20f30 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
20f40 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
20f50 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
20f60 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
20f70 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
20f80 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
20f90 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
20fa0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
20fb0 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
20fc0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
20fd0 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
20fe0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
20ff0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
21000 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
21010 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
21020 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
21030 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
21040 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
21050 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
21060 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
21070 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
21080 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
21090 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
210a0 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
210b0 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
210c0 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
210d0 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
210e0 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
210f0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
21100 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
21110 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
21120 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
21130 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
21140 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
21150 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
21160 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
21170 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
21180 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
21190 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
211a0 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
211b0 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
211c0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
211d0 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
211e0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
211f0 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
21200 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
21210 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
21220 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
21230 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
21240 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
21250 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
21260 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
21270 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
21280 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
21290 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
212a0 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
212b0 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
212c0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
212d0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
212e0 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
212f0 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
21300 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
21310 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
21320 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
21330 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
21340 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
21350 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
21360 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
21370 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
21380 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
21390 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
213a0 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
213b0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
213c0 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
213d0 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
213e0 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
213f0 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
21400 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
21410 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
21420 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
21430 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
21440 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
21450 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
21460 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
21470 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
21480 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
21490 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
214a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
214b0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
214c0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
214d0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
214e0 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
214f0 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
21500 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
21510 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
21520 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
21530 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
21540 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
21550 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
21560 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
21570 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
21580 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
21590 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
215a0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
215b0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
215c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
215d0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
215e0 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
215f0 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
21600 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
21610 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21620 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
21630 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
21640 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
21650 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
21660 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
21670 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
21680 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
21690 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
216a0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
216b0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
216c0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
216d0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
216e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
216f0 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
21700 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
21710 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
21720 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
21730 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21740 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
21750 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
21760 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
21770 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
21780 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
21790 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
217a0 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
217b0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
217c0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
217d0 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
217e0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
217f0 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
21800 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
21810 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
21820 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
21830 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
21840 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
21850 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
21860 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
21870 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
21880 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
21890 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
218a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
218b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
218c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
218d0 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
218e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
218f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21900 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21910 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
21920 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
21930 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
21940 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
21950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
21960 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
21970 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
21980 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
21990 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
219a0 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
219b0 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
219c0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
219d0 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
219e0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
219f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
21a00 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
21a10 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
21a20 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
21a30 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
21a40 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
21a50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
21a60 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
21a70 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
21a80 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
21a90 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
21aa0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
21ab0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
21ac0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
21ad0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
21ae0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
21af0 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
21b00 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
21b10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
21b20 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
21b30 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
21b40 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
21b50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
21b60 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
21b70 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
21b80 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
21b90 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
21ba0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21bb0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
21bc0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
21bd0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
21be0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
21bf0 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
21c00 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
21c10 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
21c20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  0;.  }.  rc = sq
21c30 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
21c40 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
21c50 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c70 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
21c80 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ca0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
21cb0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
21cc0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
21cd0 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
21ce0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
21cf0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21d00 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21d10 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21d20 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
21d30 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
21d40 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
21d50 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
21d60 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
21d70 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
21d80 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
21d90 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
21da0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
21db0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
21dc0 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
21dd0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
21de0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
21df0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
21e00 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
21e10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21e20 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
21e30 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21e40 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
21e50 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
21e60 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
21e70 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
21e80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
21e90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
21ea0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
21eb0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
21ec0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
21ed0 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
21ee0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
21ef0 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
21f00 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
21f10 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21f20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
21f30 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
21f40 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
21f50 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
21f60 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
21f70 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
21f80 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
21f90 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
21fa0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
21fb0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
21fc0 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
21fd0 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
21fe0 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20  m within a Next 
21ff0 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
22000 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
22010 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
22020 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
22030 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
22040 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
22050 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
22060 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
22070 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
22080 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
22090 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
220a0 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
220b0 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
220c0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
220d0 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
220e0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
220f0 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
22100 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
22110 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
22120 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
22130 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
22140 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
22150 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
22160 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
22170 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
22180 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
22190 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
221a0 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
221b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
221c0 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65  ete: {.  i64 iKe
221d0 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  y;.  VdbeCursor 
221e0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
221f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22200 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22210 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22220 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22230 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22240 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
22250 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
22260 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
22270 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
22280 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
22290 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
222a0 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20  tRowid;      /* 
222b0 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68  Only used for th
222c0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
222d0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65  ..  /* The OP_De
222e0 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61  lete opcode alwa
222f0 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50  ys follows an OP
22300 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50  _NotExists or OP
22310 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50  _Last or.  ** OP
22320 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73  _Column on the s
22330 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75  ame table withou
22340 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e  t any intervenin
22350 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61  g operations tha
22360 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76  t.  ** might mov
22370 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20  e or invalidate 
22380 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e  the cursor.  Hen
22390 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20  ce cursor pC is 
223a0 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a  always pointing.
223b0 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20    ** to the row 
223c0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
223d0 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62  d the sqlite3Vdb
223e0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
223f0 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62  operation.  ** b
22400 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61  elow is always a
22410 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f   no-op and canno
22420 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c  t fail.  We will
22430 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20   run it anyhow, 
22440 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20  though,.  ** to 
22450 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75  guard against fu
22460 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20  ture changes to 
22470 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
22480 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65  or..  **/.  asse
22490 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
224a0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
224b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
224c0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
224d0 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
224e0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
224f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22500 65 72 72 6f 72 3b 0a 0a 20 20 72 63 20 3d 20 73  error;..  rc = s
22510 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
22520 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  e(pC->pCursor);.
22530 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22540 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22550 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
22560 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
22570 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
22580 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22590 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
225a0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
225b0 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54  >p4.z && pC->isT
225c0 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e  able ){.    db->
225d0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
225e0 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
225f0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20  SQLITE_DELETE,. 
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22610 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70         db->aDb[p
22620 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70  C->iDb].zName, p
22630 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b  Op->p4.z, iKey);
22640 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22650 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
22660 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
22670 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
22680 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
22690 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
226a0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
226b0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
226c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
226d0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
226e0 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
226f0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
22700 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
22710 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
22720 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
22730 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
22740 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
22750 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
22760 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
22770 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
22780 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
22790 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
227a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
227b0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
227c0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
227d0 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
227e0 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
227f0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
22800 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22810 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
22820 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
22830 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
22840 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67  trim(r[P3],P4) g
22850 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  oto P2.**.** P1 
22860 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
22870 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
22880 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20  tion compares a 
22890 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a  prefix of the.**
228a0 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
228b0 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
228c0 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
228d0 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
228e0 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
228f0 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
22900 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20  oints to.  Only 
22910 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65  the first P4 fie
22920 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20  lds.** of r[P3] 
22930 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72  and the sorter r
22940 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72  ecord are compar
22950 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  ed..**.** If eit
22960 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f  her P3 or the so
22970 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  rter contains a 
22980 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74  NULL in one of t
22990 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74  heir significant
229a0 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20  .** fields (not 
229b0 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20  counting the P4 
229c0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
229d0 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f  d which are igno
229e0 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65  red) then.** the
229f0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
22a00 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75  ssumed to be equ
22a10 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  al..**.** Fall t
22a20 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69  hrough to next i
22a30 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68  nstruction if th
22a40 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f  e two records co
22a50 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a  mpare equal to.*
22a60 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a  * each other.  J
22a70 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
22a80 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
22a90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
22aa0 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
22ab0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22ac0 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
22ad0 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d  nKeyCol;..  pC =
22ae0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22af0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
22b00 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
22b10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
22b20 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
22b30 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
22b40 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79  pOp->p3];.  nKey
22b50 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Col = pOp->p4.i;
22b60 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
22b70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
22b80 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
22b90 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26  pIn3, nKeyCol, &
22ba0 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  res);.  VdbeBran
22bb0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
22bc0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
22bd0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
22be0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
22bf0 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
22c00 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
22c10 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
22c20 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
22c30 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
22c40 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
22c50 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
22c60 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
22c70 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
22c80 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
22c90 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
22ca0 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
22cb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
22cc0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22cd0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22ce0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
22cf0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
22d00 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
22d10 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61  y(pC, pOut);.  a
22d20 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
22d30 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66  E_OK || (pOut->f
22d40 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
22d50 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
22d60 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
22d70 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
22d80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22d90 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
22da0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
22db0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
22dc0 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
22dd0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
22de0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
22df0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
22e00 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
22e10 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
22e20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
22e30 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
22e40 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
22e50 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
22e60 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22e70 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
22e80 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
22e90 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
22ea0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
22eb0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
22ec0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
22ed0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
22ee0 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
22ef0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22f00 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57  [P2]=key.**.** W
22f10 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22f20 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
22f30 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
22f40 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
22f50 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
22f60 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
22f70 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
22f80 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
22f90 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
22fa0 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
22fb0 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
22fc0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
22fd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
22fe0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
22ff0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
23000 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
23010 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
23020 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
23030 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
23040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
23050 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
23060 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
23070 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
23080 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
23090 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
230a0 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
230b0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
230c0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
230d0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
230e0 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
230f0 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
23100 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
23110 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
23120 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
23130 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23140 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23150 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23160 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23170 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
23180 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
23190 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
231a0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
231b0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
231c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
231d0 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
231e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
231f0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
23200 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23210 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
23220 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23230 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
23240 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
23250 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
23260 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
23270 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
23280 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
23290 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
232a0 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
232b0 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
232c0 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
232d0 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
232e0 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
232f0 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
23300 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
23310 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
23320 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
23330 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
23340 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
23350 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
23360 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
23370 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
23380 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
23390 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
233a0 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
233b0 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
233c0 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
233d0 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
233e0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
233f0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
23400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23410 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
23420 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
23430 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
23440 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23450 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
23460 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
23470 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
23480 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
23490 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
234a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
234b0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
234c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
234d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
234e0 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
234f0 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
23500 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
23510 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
23520 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
23530 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
23540 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
23550 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
23560 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
23570 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
23580 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
23590 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
235a0 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
235b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
235c0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
235d0 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
235e0 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
235f0 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
23600 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
23610 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
23620 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
23630 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
23640 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
23650 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
23660 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
23670 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
23680 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
23690 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
236a0 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
236b0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
236c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
236d0 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
236e0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
236f0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
23700 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
23710 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
23720 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
23730 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
23740 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
23750 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
23760 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
23770 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
23780 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
23790 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
237a0 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
237b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
237c0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
237d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
237e0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
237f0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
23800 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
23810 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
23820 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
23830 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
23840 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
23850 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
23860 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
23870 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
23880 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
23890 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
238a0 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
238b0 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
238c0 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
238d0 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
238e0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
238f0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
23900 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
23910 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
23920 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
23930 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
23940 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
23950 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
23960 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23970 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
23980 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
23990 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
239a0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
239b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
239c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
239d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
239e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
239f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23a00 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23a10 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
23a20 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43  ableReg==0 || pC
23a30 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
23a40 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
23a50 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
23a60 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
23a70 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
23a80 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
23a90 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
23aa0 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
23ab0 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
23ac0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23ad0 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
23ae0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
23af0 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
23b00 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
23b10 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
23b20 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
23b30 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
23b40 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
23b50 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
23b60 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
23b70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
23b80 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
23b90 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
23ba0 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64  (p, pVtab);.#end
23bb0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
23bc0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
23bd0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
23be0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
23bf0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
23c00 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
23c10 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
23c20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
23c30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23c40 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
23c50 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
23c60 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
23c70 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
23c80 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
23c90 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
23ca0 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
23cb0 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
23cc0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23cd0 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
23ce0 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
23cf0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
23d00 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
23d10 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
23d20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23d30 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
23d40 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
23d50 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
23d60 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
23d70 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
23d80 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
23d90 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
23da0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
23db0 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
23dc0 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
23dd0 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
23de0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
23df0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23e00 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
23e10 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23e20 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23e30 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23e40 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23e50 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23e60 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23e70 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
23e80 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
23e90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23ea0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
23eb0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
23ec0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
23ed0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
23ee0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
23ef0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23f00 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
23f10 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
23f20 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
23f30 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
23f40 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
23f50 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
23f60 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
23f70 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
23f80 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23f90 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
23fa0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
23fb0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
23fc0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
23fd0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
23fe0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
23ff0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
24000 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24010 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
24020 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24030 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24040 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
24050 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
24060 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
24070 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
24080 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
24090 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
240a0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
240b0 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
240c0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
240d0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
240e0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
240f0 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
24100 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
24110 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
24120 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24130 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
24140 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
24150 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24160 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24170 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24180 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24190 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
241a0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
241b0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
241c0 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
241d0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
241e0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
241f0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
24200 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
24210 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
24220 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
24230 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
24240 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
24250 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
24260 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24270 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
24280 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
24290 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
242a0 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
242b0 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
242c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
242d0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
242e0 69 66 28 20 72 65 73 20 29 20 70 63 20 3d 20 70  if( res ) pc = p
242f0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
24300 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
24310 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
24320 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
24330 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
24340 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
24350 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
24360 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
24370 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
24380 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
24390 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
243a0 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
243b0 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
243c0 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
243d0 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
243e0 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
243f0 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
24400 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
24410 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
24420 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
24430 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
24440 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
24450 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
24460 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
24470 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
24480 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
24490 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
244a0 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
244b0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
244c0 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
244d0 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
244e0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
244f0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
24500 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
24510 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
24520 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
24530 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
24540 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
24550 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
24560 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
24570 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
24580 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
24590 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
245a0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
245b0 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
245c0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
245d0 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
245e0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
245f0 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
24600 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
24610 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
24620 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
24630 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
24640 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
24650 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
24660 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
24670 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
24680 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
24690 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
246a0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
246b0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
246c0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
246d0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
246e0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
246f0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
24700 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
24710 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
24720 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
24730 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
24740 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
24750 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
24760 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
24770 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
24780 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
24790 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
247a0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
247b0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
247c0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
247d0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
247e0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
247f0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
24800 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
24810 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
24820 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
24830 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24840 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
24850 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
24860 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24870 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24880 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24890 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
248a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
248b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
248c0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
248d0 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
248e0 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
248f0 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
24900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24910 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
24920 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
24930 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
24940 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
24950 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24960 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
24970 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
24980 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
24990 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  >pCursor;.    as
249a0 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
249b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
249c0 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
249d0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
249e0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
249f0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
24a00 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24a10 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72  STALE;.    pC->r
24a20 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
24a30 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
24a40 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24a50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
24a60 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
24a70 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
24a80 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
24a90 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
24aa0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
24ab0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
24ac0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24ad0 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
24ae0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
24af0 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
24b00 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
24b10 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
24b20 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
24b30 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
24b40 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
24b50 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
24b60 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
24b70 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
24b80 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
24b90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
24ba0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
24bb0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
24bc0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
24bd0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
24be0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
24bf0 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
24c00 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
24c10 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
24c20 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
24c30 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
24c40 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
24c50 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
24c60 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
24c70 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
24c80 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
24c90 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
24ca0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
24cb0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
24cc0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
24cd0 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
24ce0 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
24cf0 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
24d00 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
24d10 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
24d20 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
24d30 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
24d40 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
24d50 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
24d60 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
24d70 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
24d80 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
24d90 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
24da0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
24db0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
24dc0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
24dd0 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
24de0 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
24df0 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
24e00 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
24e10 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
24e20 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
24e30 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
24e40 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
24e50 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
24e60 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
24e70 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
24e80 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
24e90 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
24ea0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
24eb0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
24ec0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
24ed0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
24ee0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
24ef0 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
24f00 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
24f10 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
24f20 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
24f30 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
24f40 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
24f50 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
24f60 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
24f70 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
24f80 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
24f90 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
24fa0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
24fb0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
24fc0 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
24fd0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
24fe0 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
24ff0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
25000 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
25010 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
25020 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
25030 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
25040 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
25050 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
25060 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
25070 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
25080 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
25090 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
250a0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
250b0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
250c0 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
250d0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
250e0 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
250f0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
25100 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
25110 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
25120 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
25130 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
25140 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
25150 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
25160 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
25170 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
25180 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
25190 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
251a0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
251b0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
251c0 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
251d0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
251e0 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
251f0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
25200 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
25210 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
25220 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
25230 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
25240 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
25250 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
25260 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
25270 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
25280 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
25290 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
252a0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
252b0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
252c0 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
252d0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
252e0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
252f0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
25300 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
25310 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
25320 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
25330 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
25340 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
25350 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
25360 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
25370 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
25380 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
25390 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
253a0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
253b0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
253c0 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
253d0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
253e0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
253f0 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
25400 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
25410 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
25420 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
25430 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  es a no-op..*/.c
25440 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
25450 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
25460 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25470 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
25480 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25490 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
254a0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
254b0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
254c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
254d0 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
254e0 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
254f0 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
25500 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
25510 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
25520 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
25530 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
25540 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
25550 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
25560 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
25570 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
25580 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
25590 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
255a0 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
255b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
255c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
255d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
255e0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
255f0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
25600 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
25610 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
25620 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25630 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
25640 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25650 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25660 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25670 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25680 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b  ( pC->pCursor );
25690 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
256a0 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
256b0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
256c0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
256d0 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
256e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
256f0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
25700 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
25710 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
25720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25730 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
25740 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
25750 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
25760 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
25770 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
25780 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
25790 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
257a0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
257b0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
257c0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
257d0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
257e0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
257f0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
25800 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
25810 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
25820 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
25830 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
25840 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
25850 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
25860 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
25870 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
25880 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
25890 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
258a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
258b0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
258c0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
258d0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
258e0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
258f0 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
25900 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
25910 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
25920 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
25930 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
25940 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
25950 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25960 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
25970 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
25980 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
25990 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
259a0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
259b0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
259c0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
259d0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
259e0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
259f0 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
25a00 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
25a10 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
25a20 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25a30 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
25a40 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
25a50 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  );.  if( res==0 
25a60 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
25a70 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d  ow = 0;.    pc =
25a80 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25a90 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
25aa0 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
25ab0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
25ac0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
25ad0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
25ae0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d    }else{.    pC-
25af0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
25b00 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
25b10 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74 6f  alid = 0;.  goto
25b20 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
25b30 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
25b40 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
25b50 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53   P2 P3 * P5.** S
25b60 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
25b70 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
25b80 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
25b90 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
25ba0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
25bb0 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
25bc0 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
25bd0 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
25be0 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
25bf0 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
25c00 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
25c10 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69   nil..**.** P3 i
25c20 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72  s a flag that pr
25c30 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f  ovides a hint to
25c40 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65   the b-tree laye
25c50 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69  r that this.** i
25c60 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20  nsert is likely 
25c70 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e  to be an append.
25c80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
25c90 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
25ca0 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  NGE bit set, the
25cb0 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
25cc0 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65  nter is.** incre
25cd0 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69  mented by this i
25ce0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
25cf0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
25d00 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  GE bit is clear,
25d10 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61  .** then the cha
25d20 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75  nge counter is u
25d30 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20  nchanged..**.** 
25d40 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
25d50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
25d60 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  LT bit set, then
25d70 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
25d80 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f   have.** just do
25d90 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65  ne a seek to the
25da0 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20   spot where the 
25db0 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20  new entry is to 
25dc0 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20  be inserted..** 
25dd0 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73  This flag avoids
25de0 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20   doing an extra 
25df0 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  seek..**.** This
25e00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
25e10 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
25e20 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
25e30 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
25e40 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
25e50 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
25e60 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
25e70 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
25e80 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
25e90 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
25ea0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
25eb0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25ec0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
25ed0 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
25ee0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
25ef0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
25f00 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
25f10 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25f20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25f30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25f40 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25f50 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
25f60 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
25f70 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
25f80 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
25f90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
25fa0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
25fb0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
25fc0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
25fd0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
25fe0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
25ff0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
26000 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65  Change++;.  asse
26010 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
26020 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
26030 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63  Table==0 );.  rc
26040 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
26050 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  n2);.  if( rc==S
26060 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
26070 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
26080 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
26090 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
260a0 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
260b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
260c0 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
260d0 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
260e0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
260f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
26100 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
26110 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
26120 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
26130 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
26140 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
26150 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
26160 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
26170 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
26180 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
26190 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
261a0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
261b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
261c0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
261d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
261e0 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
261f0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
26200 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
26210 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
26220 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
26230 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
26240 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
26250 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
26260 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
26270 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
26280 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
26290 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
262a0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
262b0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
262c0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
262d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
262e0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
262f0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
26300 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
26310 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
26320 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
26330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
26340 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
26350 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
26360 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
26370 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26380 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26390 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
263a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
263b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
263c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
263d0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
263e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
263f0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
26400 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
26410 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
26420 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
26430 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
26440 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
26450 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
26460 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
26470 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
26480 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
26490 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
264a0 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
264b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
264c0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
264d0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20  ; }.#endif.  rc 
264e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
264f0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
26500 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
26510 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  es);.  if( rc==S
26520 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
26530 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
26540 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
26550 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20  e(pCrsr);.  }.  
26560 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
26570 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
26580 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26590 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
265a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
265b0 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
265c0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
265d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
265e0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69  =rowid.**.** Wri
265f0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
26600 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
26610 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
26620 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
26630 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
26640 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
26650 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
26660 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
26670 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
26680 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
26690 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
266a0 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
266b0 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
266c0 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
266d0 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
266e0 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
266f0 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26710 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
26720 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
26730 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
26740 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
26750 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
26760 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26770 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26780 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26790 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
267a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
267b0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
267c0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
267d0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
267e0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
267f0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20  EM_Null;.  rc = 
26800 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
26810 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
26820 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20 67  f( NEVER(rc) ) g
26830 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
26840 5f 65 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74  _error;.  assert
26850 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
26860 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
26870 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
26880 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43  ==0 );.  if( !pC
26890 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
268a0 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20   rowid = 0;  /* 
268b0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
268c0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
268d0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
268e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
268f0 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
26900 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b   pCrsr, &rowid);
26910 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
26920 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
26930 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26940 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
26950 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
26960 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  owid;.    pOut->
26970 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
26980 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26990 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
269a0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
269b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
269c0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
269d0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
269e0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
269f0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
26a00 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
26a10 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
26a20 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
26a30 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
26a40 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
26a50 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
26a60 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
26a70 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
26a80 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
26a90 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
26aa0 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
26ab0 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
26ac0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
26ad0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
26ae0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
26af0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
26b00 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
26b10 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
26b20 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
26b30 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
26b40 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
26b50 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20  pcode: IdxGT P1 
26b60 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
26b70 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
26b80 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
26b90 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
26ba0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
26bb0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
26bc0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
26bd0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
26be0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
26bf0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
26c00 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
26c10 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
26c20 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
26c30 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
26c40 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
26c50 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
26c60 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
26c70 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
26c80 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
26c90 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
26ca0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
26cb0 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
26cc0 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
26cd0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
26ce0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
26cf0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
26d00 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
26d10 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
26d20 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
26d30 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
26d40 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
26d50 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
26d60 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
26d70 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
26d80 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
26d90 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
26da0 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
26db0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
26dc0 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
26dd0 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
26de0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26df0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
26e00 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
26e10 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
26e20 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
26e30 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
26e40 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
26e50 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
26e60 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
26e70 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
26e80 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
26e90 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
26ea0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
26eb0 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50  code: IdxLE P1 P
26ec0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
26ed0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
26ee0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
26ef0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
26f00 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
26f10 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
26f20 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
26f30 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
26f40 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
26f50 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
26f60 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
26f70 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
26f80 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
26f90 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26fa0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
26fb0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
26fc0 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
26fd0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
26fe0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
26ff0 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
27000 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
27010 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  o the key value 
27020 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
27030 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61  P2. Otherwise fa
27040 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
27050 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
27060 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
27070 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLE:          /
27080 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
27090 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20  P_IdxGT:        
270a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
270b0 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20  e OP_IdxLT:     
270c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
270d0 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20  case OP_IdxGE:  
270e0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  {       /* jump 
270f0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
27100 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
27110 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
27120 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
27130 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27140 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27150 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27160 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27170 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27180 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
27190 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
271a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
271b0 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
271c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
271d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
271e0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
271f0 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
27200 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
27210 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
27220 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
27230 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
27240 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
27250 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
27260 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
27270 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
27280 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27290 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
272a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
272b0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
272c0 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
272d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
272e0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
272f0 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
27300 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27310 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
27320 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
27330 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
27340 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
27350 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
27360 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
27370 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
27380 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
27390 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
273a0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
273b0 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
273c0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
273d0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
273e0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
273f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27400 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
27410 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
27420 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
27430 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
27440 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
27450 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
27460 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
27470 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
27480 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
27490 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
274a0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
274b0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
274c0 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
274d0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
274e0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
274f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
27500 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
27510 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
27520 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
27530 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
27540 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
27550 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20  if( res>0 ){.   
27560 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
27570 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1 ;.  }.  break;
27580 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
27590 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
275a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
275b0 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
275c0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
275d0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
275e0 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
275f0 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
27600 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
27610 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
27620 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
27630 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
27640 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
27650 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
27660 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
27670 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
27680 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
27690 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
276a0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
276b0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
276c0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
276d0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
276e0 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
276f0 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
27700 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
27710 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
27720 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
27730 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
27740 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
27750 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
27760 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
27770 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
27780 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
27790 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
277a0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
277b0 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
277c0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
277d0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
277e0 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
277f0 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
27800 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
27810 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
27820 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a  2.  If no page .
27830 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20  ** movement was 
27840 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73  required (becaus
27850 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  e the table bein
27860 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
27870 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61  ready .** the la
27880 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
27890 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a  tabase) then a z
278a0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
278b0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
278c0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
278d0 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
278e0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
278f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
27900 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
27910 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
27920 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
27930 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
27940 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ase */.  int iMo
27950 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b  ved;.  int iCnt;
27960 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a  .  Vdbe *pVdbe;.
27970 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73    int iDb;..  as
27980 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
27990 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  y==0 );.#ifndef 
279a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
279b0 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20  UALTABLE.  iCnt 
279c0 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65  = 0;.  for(pVdbe
279d0 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62  =db->pVdbe; pVdb
279e0 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65  e; pVdbe = pVdbe
279f0 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
27a00 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
27a10 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
27a20 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64  & pVdbe->bIsRead
27a30 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62  er .     && pVdb
27a40 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c  e->inVtabMethod<
27a50 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d  2 && pVdbe->pc>=
27a60 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  0 .    ){.      
27a70 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
27a80 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
27a90 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a   db->nVdbeRead;.
27aa0 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66  #endif.  pOut->f
27ab0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
27ac0 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b  .  if( iCnt>1 ){
27ad0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
27ae0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
27af0 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
27b00 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
27b10 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
27b20 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
27b30 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61  iCnt==1 );.    a
27b40 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
27b50 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
27b60 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
27b70 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
27b80 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
27b90 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
27ba0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
27bb0 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
27bc0 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
27bd0 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
27be0 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
27bf0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27c00 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
27c10 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
27c20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27c30 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
27c40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
27c50 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
27c60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
27c70 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
27c80 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
27c90 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
27ca0 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
27cb0 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
27cc0 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
27cd0 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
27ce0 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
27cf0 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
27d00 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
27d10 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
27d20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
27d30 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
27d40 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
27d50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
27d60 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
27d70 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
27d80 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
27d90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
27da0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
27db0 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
27dc0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
27dd0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
27de0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
27df0 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
27e00 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
27e10 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
27e20 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
27e30 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
27e40 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
27e50 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
27e60 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
27e70 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
27e80 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
27e90 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
27ea0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
27eb0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
27ec0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
27ed0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
27ee0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
27ef0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
27f00 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
27f10 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
27f20 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
27f30 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
27f40 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
27f50 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
27f60 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
27f70 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
27f80 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
27f90 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
27fa0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
27fb0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
27fc0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
27fd0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
27fe0 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
27ff0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
28000 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
28010 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
28020 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
28030 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
28040 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
28050 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
28060 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
28070 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
28080 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
28090 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
280a0 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
280b0 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
280c0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
280d0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
280e0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
280f0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
28100 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63  pOp->p2) );.  rc
28110 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
28120 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
28130 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
28140 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
28150 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
28160 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
28170 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
28180 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
28190 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
281a0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
281b0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
281c0 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
281d0 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
281e0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
281f0 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
28200 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
28210 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
28220 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
28230 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
28240 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
28250 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20  Sorter P1 * * * 
28260 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
28270 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d  ll contents from
28280 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
28290 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a  able or sorter.*
282a0 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f  * that is open o
282b0 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a  n cursor P1..**.
282c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  ** This opcode o
282d0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75  nly works for cu
282e0 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73  rsors used for s
282f0 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70  orting and.** op
28300 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65  ened with OP_Ope
28310 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50  nEphemeral or OP
28320 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a  _SorterOpen..*/.
28330 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72  case OP_ResetSor
28340 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ter: {.  VdbeCur
28350 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73  sor *pC;. .  ass
28360 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28370 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28380 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28390 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
283a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
283b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
283c0 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20 73  pSorter ){.    s
283d0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
283e0 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70 53  Reset(db, pC->pS
283f0 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b  orter);.  }else{
28400 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28410 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a  >isEphemeral );.
28420 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28430 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f  BtreeClearTableO
28440 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72  fCursor(pC->pCur
28450 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
28460 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28470 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20   CreateTable P1 
28480 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
28490 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
284a0 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
284b0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62  locate a new tab
284c0 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  le in the main d
284d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
284e0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
284f0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
28500 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
28510 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
28520 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
28530 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
28540 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
28550 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
28560 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
28570 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
28580 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65  * The difference
28590 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65   between a table
285a0 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73   and an index is
285b0 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20   this:  A table 
285c0 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34  must.** have a 4
285d0 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65  -byte integer ke
285e0 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61  y and can have a
285f0 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20  rbitrary data.  
28600 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20  An index.** has 
28610 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79  an arbitrary key
28620 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a   but no data..**
28630 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72  .** See also: Cr
28640 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20  eateIndex.*/./* 
28650 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e  Opcode: CreateIn
28660 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  dex P1 P2 * * *.
28670 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
28680 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a  2]=root iDb=P1.*
28690 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
286a0 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65  new index in the
286b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
286c0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
286d0 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
286e0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
286f0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
28700 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
28710 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
28720 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
28730 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
28740 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
28750 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
28760 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f  P2..**.** See do
28770 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f  cumentation on O
28780 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f  P_CreateTable fo
28790 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
287a0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
287b0 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78  e OP_CreateIndex
287c0 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  :            /* 
287d0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
287e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
287f0 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
28800 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
28810 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
28820 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
28830 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
28840 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
28850 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28860 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
28870 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
28880 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
28890 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
288a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
288b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
288c0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
288d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
288e0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
288f0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
28900 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
28910 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
28920 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
28930 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
28940 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
28950 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
28960 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
28970 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
28980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
28990 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
289a0 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
289b0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
289c0 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
289d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
289e0 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
289f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
28a00 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
28a10 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
28a20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
28a30 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
28a40 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
28a50 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
28a60 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
28a70 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
28a80 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
28a90 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
28aa0 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
28ab0 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
28ac0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
28ad0 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
28ae0 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
28af0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
28b00 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
28b10 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
28b20 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
28b30 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
28b40 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
28b50 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
28b60 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
28b70 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
28b80 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
28b90 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
28ba0 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
28bb0 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
28bc0 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
28bd0 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
28be0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
28bf0 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
28c00 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
28c10 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
28c20 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
28c30 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
28c40 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
28c50 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
28c60 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
28c70 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
28c80 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
28c90 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
28ca0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
28cb0 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
28cc0 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
28cd0 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
28ce0 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
28cf0 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
28d00 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
28d10 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
28d20 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
28d30 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
28d40 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
28d50 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
28d60 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
28d70 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
28d80 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
28d90 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
28da0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
28db0 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
28dc0 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
28dd0 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
28de0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
28df0 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
28e00 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e  , zMaster, pOp->
28e10 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a  p4.z);.    if( z
28e20 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
28e30 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
28e40 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
28e50 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
28e60 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
28e70 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
28e80 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
28e90 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
28ea0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
28eb0 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
28ec0 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
28ed0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
28ee0 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
28ef0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
28f00 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
28f10 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
28f20 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
28f30 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
28f40 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
28f50 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
28f60 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
28f70 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
28f80 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65   if( rc ) sqlite
28f90 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
28fa0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
28fb0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
28fc0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
28fd0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28fe0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
28ff0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
29000 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
29010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
29020 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
29030 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
29040 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
29050 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
29060 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
29070 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
29080 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
29090 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
290a0 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
290b0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
290c0 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
290d0 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
290e0 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
290f0 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
29100 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
29110 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
29120 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29130 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
29140 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
29150 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
29160 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
29170 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
29180 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
29190 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
291a0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
291b0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
291c0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
291d0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
291e0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
291f0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
29200 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
29210 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
29220 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
29230 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
29240 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
29250 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
29260 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
29270 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
29280 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
29290 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
292a0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
292b0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
292c0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
292d0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
292e0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
292f0 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
29300 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
29310 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
29320 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
29330 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
29340 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29350 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
29360 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
29370 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
29380 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
29390 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
293a0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
293b0 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
293c0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
293d0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
293e0 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
293f0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
29400 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
29410 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
29420 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f  ).** in order to
29430 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
29440 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
29450 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
29460 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
29470 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
29480 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
29490 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
294a0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
294b0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
294c0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
294d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
294e0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
294f0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
29500 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
29510 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
29520 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
29530 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
29540 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
29550 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
29560 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
29570 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
29580 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
29590 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
295a0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
295b0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
295c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
295d0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
295e0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
295f0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
29600 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
29610 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
29620 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
29630 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
29640 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
29650 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
29660 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
29670 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
29680 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
29690 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
296a0 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
296b0 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
296c0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
296d0 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
296e0 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
296f0 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
29700 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
29710 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
29720 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
29730 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
29740 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
29750 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
29760 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
29770 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
29780 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
29790 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
297a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
297b0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
297c0 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
297d0 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
297e0 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
297f0 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
29800 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
29810 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
29820 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
29830 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
29840 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
29850 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
29860 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
29870 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
29880 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
29890 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
298a0 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
298b0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
298c0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72   integer.** stor
298d0 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72  ed in reg(P1), r
298e0 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31  eg(P1+1), reg(P1
298f0 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65  +2), ....  There
29900 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a   are P2 tables.*
29910 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49  * total..**.** I
29920 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
29930 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
29940 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
29950 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
29960 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
29970 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
29980 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
29990 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
299a0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
299b0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
299c0 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
299d0 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
299e0 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
299f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
29a00 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
29a10 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
29a20 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
29a30 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
29a40 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
29a50 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
29a60 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
29a70 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  ked */.  int j; 
29a80 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
29a90 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
29aa0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
29ab0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
29ac0 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
29ad0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
29ae0 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
29af0 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
29b00 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
29b10 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
29b20 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
29b30 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
29b40 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
29b50 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
29b60 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
29b70 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
29b80 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73  0 );.  aRoot = s
29b90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
29ba0 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  w(db, sizeof(int
29bb0 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20  )*(nRoot+1) );. 
29bc0 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20   if( aRoot==0 ) 
29bd0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61  goto no_mem;.  a
29be0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
29bf0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
29c00 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
29c10 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
29c20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
29c30 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
29c40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
29c50 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
29c60 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
29c70 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
29c80 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
29c90 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
29ca0 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
29cb0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
29cc0 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
29cd0 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
29ce0 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
29cf0 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
29d00 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
29d10 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
29d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
29d30 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
29d40 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
29d50 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
29d60 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
29d70 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
29d80 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
29d90 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
29da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29db0 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
29dc0 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
29dd0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
29de0 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70  (db, aRoot);.  p
29df0 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
29e00 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  r;.  sqlite3Vdbe
29e10 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
29e20 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20  ;.  if( nErr==0 
29e30 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a  ){.    assert( z
29e40 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ==0 );.  }else i
29e50 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67  f( z==0 ){.    g
29e60 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65  oto no_mem;.  }e
29e70 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
29e80 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
29e90 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
29ea0 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
29eb0 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
29ec0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
29ed0 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
29ee0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
29ef0 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
29f00 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
29f10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
29f20 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
29f30 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
29f40 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
29f50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
29f60 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28  nopsis:  rowset(
29f70 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
29f80 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
29f90 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
29fa0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
29fb0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
29fc0 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
29fd0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
29fe0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
29ff0 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2a000 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2a010 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2a020 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2a030 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2a040 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2a050 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2a060 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2a070 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2a080 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2a090 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2a0a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2a0b0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2a0c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2a0d0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2a0e0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2a0f0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2a100 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2a110 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2a120 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2a130 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2a140 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2a150 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a160 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2a170 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2a180 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73  sis:  r[P3]=rows
2a190 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
2a1a0 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
2a1b0 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f  t value from boo
2a1c0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e  lean index P1 an
2a1d0 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65  d put that value
2a1e0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2a1f0 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f  r P3.  Or, if bo
2a200 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69  olean index P1 i
2a210 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2a220 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2a230 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2a240 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2a250 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2a260 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2a270 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2a280 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2a290 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2a2a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2a2b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2a2c0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2a2d0 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2a2e0 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2a2f0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2a300 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2a310 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2a320 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2a330 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2a340 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2a350 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2a360 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65 42  2 - 1;.    VdbeB
2a370 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
2a380 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
2a390 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
2a3a0 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
2a3b0 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ex */.    sqlite
2a3c0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2a3d0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2a3e0 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65 42   val);.    VdbeB
2a3f0 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b  ranchTaken(0,2);
2a400 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
2a410 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2a420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2a430 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
2a440 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2a450 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
2a460 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
2a470 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2a480 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
2a490 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
2a4a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2a4b0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
2a4c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
2a4d0 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
2a4e0 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
2a4f0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
2a500 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
2a510 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
2a520 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
2a530 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
2a540 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
2a550 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
2a560 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
2a570 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
2a580 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
2a590 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
2a5a0 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
2a5b0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
2a5c0 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
2a5d0 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
2a5e0 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
2a5f0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
2a600 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
2a610 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
2a620 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
2a630 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
2a640 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
2a650 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
2a660 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
2a670 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
2a680 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
2a690 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
2a6a0 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
2a6b0 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
2a6c0 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
2a6d0 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
2a6e0 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
2a6f0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
2a700 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
2a710 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
2a720 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
2a730 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
2a740 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
2a750 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
2a760 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
2a770 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
2a780 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
2a790 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
2a7a0 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
2a7b0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
2a7c0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
2a7d0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
2a7e0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
2a7f0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
2a800 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
2a810 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2a820 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
2a830 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
2a840 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
2a850 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
2a860 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
2a870 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
2a880 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
2a890 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2a8a0 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
2a8b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2a8c0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a8e0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
2a8f0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
2a900 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
2a910 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2a920 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
2a930 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2a940 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
2a950 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
2a960 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
2a970 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
2a980 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
2a990 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
2a9a0 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
2a9b0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
2a9c0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
2a9d0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
2a9e0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
2a9f0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
2aa00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2aa10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2aa20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2aa30 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2aa40 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2aa50 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2aa60 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2aa70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
2aa80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2aa90 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
2aaa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
2aab0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
2aac0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
2aad0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
2aae0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
2aaf0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2ab00 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
2ab10 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
2ab20 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
2ab30 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
2ab40 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63  ists ){.      pc
2ab50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2ab60 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2ab70 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65   }.  }.  if( iSe
2ab80 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
2ab90 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2aba0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2abb0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
2abc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2abd0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2abe0 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
2abf0 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
2ac00 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2ac10 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
2ac20 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
2ac30 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
2ac40 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
2ac50 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
2ac60 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2ac70 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
2ac80 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
2ac90 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
2aca0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
2acb0 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
2acc0 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
2acd0 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
2ace0 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
2acf0 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2ad00 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2ad10 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
2ad20 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
2ad30 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
2ad40 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
2ad50 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
2ad60 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2ad70 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
2ad80 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
2ad90 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
2ada0 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
2adb0 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
2adc0 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
2add0 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
2ade0 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
2adf0 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
2ae00 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2ae10 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
2ae20 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
2ae30 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  rogram..**.** If
2ae40 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P5 is non-zero,
2ae50 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2ae60 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69  program invocati
2ae70 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  on is enabled..*
2ae80 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
2ae90 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2aea0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
2aeb0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2aec0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
2aed0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
2aee0 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2aef0 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
2af00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2af10 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
2af20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
2af30 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2af40 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
2af50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2af60 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
2af70 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
2af80 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2af90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2afa0 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
2afb0 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
2afc0 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
2afd0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
2afe0 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
2aff0 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
2b000 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
2b010 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
2b020 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
2b030 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
2b040 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
2b050 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
2b060 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
2b070 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
2b080 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
2b090 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
2b0a0 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
2b0b0 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
2b0c0 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
2b0d0 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
2b0e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2b0f0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2b100 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
2b110 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
2b120 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
2b130 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2b140 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2b150 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
2b160 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
2b170 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2b180 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
2b190 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
2b1a0 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
2b1b0 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
2b1c0 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
2b1d0 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
2b1e0 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
2b1f0 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
2b200 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
2b210 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
2b220 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
2b230 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
2b240 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2b250 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
2b260 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
2b270 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
2b280 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
2b290 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
2b2a0 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
2b2b0 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
2b2c0 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
2b2d0 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
2b2e0 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
2b2f0 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
2b300 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
2b310 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
2b320 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
2b330 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
2b340 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2b350 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
2b360 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
2b370 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
2b380 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
2b390 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
2b3a0 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
2b3b0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
2b3c0 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
2b3d0 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
2b3e0 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2b3f0 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
2b400 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
2b410 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2b420 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
2b430 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
2b440 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
2b450 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
2b460 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
2b470 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
2b480 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2b490 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
2b4a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2b4b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f  zErrMsg, db, "to
2b4c0 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
2b4d0 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
2b4e0 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  on");.    break;
2b4f0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
2b500 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
2b510 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
2b520 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
2b530 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
2b540 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
2b550 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
2b560 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
2b570 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
2b580 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
2b590 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2b5a0 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
2b5b0 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
2b5c0 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
2b5d0 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
2b5e0 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
2b5f0 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
2b600 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
2b610 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
2b620 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
2b630 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
2b640 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
2b650 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
2b660 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2b670 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
2b680 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
2b690 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
2b6a0 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
2b6b0 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
2b6c0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
2b6d0 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
2b6e0 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
2b6f0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
2b700 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
2b710 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
2b720 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
2b730 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
2b740 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
2b750 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
2b760 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
2b770 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
2b780 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
2b790 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
2b7a0 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
2b7b0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
2b7c0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
2b7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2b7e0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
2b7f0 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
2b800 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20  sor *).         
2b810 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2b820 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28  >nOnce * sizeof(
2b830 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  u8);.    pFrame 
2b840 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2b850 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
2b860 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
2b870 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
2b880 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2b890 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b8a0 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
2b8b0 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
2b8c0 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52  EM_Frame;.    pR
2b8d0 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46  t->u.pFrame = pF
2b8e0 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d  rame;..    pFram
2b8f0 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46  e->v = p;.    pF
2b900 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2b910 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  = nMem;.    pFra
2b920 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20  me->nChildCsr = 
2b930 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
2b940 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d      pFrame->pc =
2b950 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d   pc;.    pFrame-
2b960 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
2b970 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
2b980 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
2b990 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
2b9a0 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
2b9b0 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
2b9c0 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
2b9d0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
2b9e0 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
2b9f0 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
2ba00 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
2ba10 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
2ba20 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65  oken;.    pFrame
2ba30 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->aOnceFlag = p-
2ba40 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20  >aOnceFlag;.    
2ba50 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61  pFrame->nOnceFla
2ba60 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  g = p->nOnceFlag
2ba70 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  ;..    pEnd = &V
2ba80 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2ba90 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
2baa0 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
2bab0 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
2bac0 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
2bad0 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
2bae0 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
2baf0 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
2bb00 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
2bb10 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
2bb20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
2bb30 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d  e = pRt->u.pFram
2bb40 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
2bb50 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50  Program->nMem+pP
2bb60 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2bb70 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2bb80 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2bb90 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2bba0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2bbb0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2bbc0 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  pc==pFrame->pc )
2bbd0 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
2bbe0 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
2bbf0 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
2bc00 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
2bc10 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
2bc20 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
2bc30 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
2bc40 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  ange;.  p->nChan
2bc50 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
2bc60 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
2bc70 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
2bc80 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
2bc90 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d  Frame)[-1];.  p-
2bca0 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
2bcb0 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
2bcc0 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
2bcd0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2bce0 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
2bcf0 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
2bd00 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a  Mem[p->nMem+1];.
2bd10 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
2bd20 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
2bd30 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
2bd40 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61  ram->nOp;.  p->a
2bd50 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a  OnceFlag = (u8 *
2bd60 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43  )&p->apCsr[p->nC
2bd70 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e  ursor];.  p->nOn
2bd80 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61  ceFlag = pProgra
2bd90 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d  m->nOnce;.  pc =
2bda0 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d   -1;.  memset(p-
2bdb0 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
2bdc0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
2bdd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2bde0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
2bdf0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2be00 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
2be10 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
2be20 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
2be30 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
2be40 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
2be50 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
2be60 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
2be70 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
2be80 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
2be90 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
2bea0 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
2beb0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
2bec0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
2bed0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
2bee0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2bef0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
2bf00 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
2bf10 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
2bf20 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
2bf30 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
2bf40 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
2bf50 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
2bf60 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
2bf70 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
2bf80 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2bf90 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
2bfa0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2bfb0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
2bfc0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
2bfd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2bfe0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
2bff0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2c000 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2c010 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2c020 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
2c030 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
2c040 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
2c050 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2c060 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
2c070 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
2c080 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
2c090 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
2c0a0 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
2c0b0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
2c0c0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
2c0d0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2c0e0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
2c0f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2c100 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2c110 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
2c120 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
2c130 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2c140 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a  fkctr[P1]+=P2.**
2c150 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
2c160 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
2c170 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
2c180 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
2c190 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
2c1a0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2c1b0 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
2c1c0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2c1d0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2c1e0 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
2c1f0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2c200 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
2c210 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
2c220 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
2c230 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
2c240 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
2c250 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2c260 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2c270 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
2c280 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
2c290 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2c2a0 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20  TE_DeferFKs ){. 
2c2b0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
2c2c0 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  ImmCons += pOp->
2c2d0 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
2c2e0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
2c2f0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2c300 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2c310 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
2c320 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
2c330 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
2c340 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c350 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
2c360 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c370 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d  is: if fkctr[P1]
2c380 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
2c390 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
2c3a0 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
2c3b0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
2c3c0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
2c3d0 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
2c3e0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
2c3f0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
2c400 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
2c410 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2c420 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
2c430 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
2c440 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2c450 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2c460 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
2c470 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
2c480 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
2c490 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
2c4a0 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
2c4b0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2c4c0 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
2c4d0 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
2c4e0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
2c4f0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
2c500 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2c510 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
2c520 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2c530 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2c540 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
2c550 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
2c560 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c570 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
2c580 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
2c590 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65  hTaken(db->nDefe
2c5a0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2c5b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2c5c0 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
2c5d0 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
2c5e0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2c5f0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2c600 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2c610 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2c620 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2c630 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
2c640 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
2c650 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2c660 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
2c670 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2c680 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2c690 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2c6a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2c6b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2c6c0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2c6d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2c6e0 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
2c6f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c700 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
2c710 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
2c720 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2c730 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
2c740 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
2c750 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
2c760 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
2c770 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
2c780 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
2c790 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
2c7a0 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
2c7b0 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
2c7c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c7d0 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
2c7e0 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
2c7f0 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
2c800 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2c810 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
2c820 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
2c830 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
2c840 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
2c850 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2c860 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
2c870 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
2c880 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
2c890 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
2c8a0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
2c8b0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2c8c0 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
2c8d0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2c8e0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2c8f0 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
2c900 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
2c910 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2c920 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2c930 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2c940 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
2c950 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
2c960 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2c970 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
2c980 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2c990 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2c9a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
2c9b0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2c9c0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2c9d0 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
2c9e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2c9f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2ca00 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
2ca10 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2ca20 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
2ca30 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
2ca40 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
2ca50 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2ca60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2ca70 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
2ca80 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
2ca90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2caa0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
2cab0 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ]>0 goto P2.**.*
2cac0 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
2cad0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2cae0 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a   1 or greater, j
2caf0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
2cb00 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2cb10 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2cb20 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2cb30 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2cb40 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2cb50 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2cb60 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2cb70 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2cb80 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2cb90 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
2cba0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2cbb0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2cbc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2cbd0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2cbe0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2cbf0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49  eBranchTaken( pI
2cc00 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20  n1->u.i>0, 2);. 
2cc10 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
2cc20 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2cc30 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2cc40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2cc50 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
2cc60 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2cc70 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c  psis: r[P1]+=P3,
2cc80 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74 6f   if r[P1]<0 goto
2cc90 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2cca0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2ccb0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2ccc0 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74  Add literal P3 t
2ccd0 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a  o the value in.*
2cce0 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2ccf0 65 6e 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  en if the value 
2cd00 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2cd10 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
2cd20 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2cd30 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a  /.case OP_IfNeg:
2cd40 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2cd50 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2cd60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2cd70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2cd80 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2cd90 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20   );.  pIn1->u.i 
2cda0 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64  += pOp->p3;.  Vd
2cdb0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2cdc0 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
2cdd0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
2cde0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
2cdf0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
2ce00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ce10 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
2ce20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2ce30 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33  opsis: r[P1]+=P3
2ce40 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f  , if r[P1]==0 go
2ce50 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  to P2.**.** The 
2ce60 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
2ce70 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2ce80 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
2ce90 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76  l P3 to the.** v
2cea0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2ceb0 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73   P1.  If the res
2cec0 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30  ult is exactly 0
2ced0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
2cee0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f  /.case OP_IfZero
2cef0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2cf00 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2cf10 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2cf20 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2cf30 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2cf40 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2cf50 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56   += pOp->p3;.  V
2cf60 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2cf70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2cf80 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2cf90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  ==0 ){.     pc =
2cfa0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2cfb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2cfc0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
2cfd0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
2cfe0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
2cff0 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
2d000 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
2d010 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
2d020 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
2d030 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
2d040 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
2d050 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
2d060 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2d070 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
2d080 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
2d090 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
2d0a0 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
2d0b0 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
2d0c0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
2d0d0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
2d0e0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
2d0f0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
2d100 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
2d110 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
2d120 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
2d130 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
2d140 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
2d150 65 6d 20 2a 70 52 65 63 3b 0a 20 20 4d 65 6d 20  em *pRec;.  Mem 
2d160 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
2d170 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69  text ctx;.  sqli
2d180 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
2d190 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  l;..  n = pOp->p
2d1a0 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d  5;.  assert( n>=
2d1b0 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61  0 );.  pRec = &a
2d1c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2d1d0 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
2d1e0 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
2d1f0 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66  l || n==0 );.  f
2d200 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
2d210 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61  , pRec++){.    a
2d220 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2d230 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61  d(pRec) );.    a
2d240 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a  pVal[i] = pRec;.
2d250 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2d260 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20  ange(p, pRec);. 
2d270 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d   }.  ctx.pFunc =
2d280 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
2d290 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d2a0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2d2b0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2d2c0 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d  sor) );.  ctx.pM
2d2d0 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65  em = pMem = &aMe
2d2e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d  m[pOp->p3];.  pM
2d2f0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74  em->n++;.  sqlit
2d300 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74  e3VdbeMemInit(&t
2d310 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
2d320 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26 74  .  ctx.pOut = &t
2d330 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
2d340 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
2d350 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70   = 0;.  ctx.skip
2d360 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  Flag = 0;.  if( 
2d370 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46  ctx.pFunc->funcF
2d380 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
2d390 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
2d3a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
2d3b0 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
2d3c0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
2d3d0 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
2d3e0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2d3f0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
2d400 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
2d410 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
2d420 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
2d430 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
2d440 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
2d450 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
2d460 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
2d470 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
2d480 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
2d490 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2d4a0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2d4b0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2d4c0 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20  _text(&t));.    
2d4d0 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
2d4e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e  ;.  }.  if( ctx.
2d4f0 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
2d500 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2d510 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2d520 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f  eq );.    i = pO
2d530 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66  p[-1].p1;.    if
2d540 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( i ) sqlite3Vdb
2d550 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2d560 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20  em[i], 1);.  }. 
2d570 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2d580 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72  elease(&t);.  br
2d590 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2d5a0 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
2d5b0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
2d5c0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
2d5d0 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
2d5e0 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2d5f0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2d600 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2d610 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2d620 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2d630 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2d640 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2d650 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2d660 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2d670 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2d680 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2d690 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2d6a0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2d6b0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2d6c0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2d6d0 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2d6e0 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2d6f0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2d700 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2d710 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2d720 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2d730 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2d740 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2d750 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2d760 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2d770 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2d780 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2d790 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2d7a0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2d7b0 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2d7c0 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2d7d0 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2d7e0 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2d7f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d800 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2d810 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2d820 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
2d830 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d840 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2d850 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2d860 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2d870 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2d880 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2d890 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2d8a0 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2d8b0 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2d8c0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2d8d0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2d8e0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2d8f0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2d900 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2d910 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2d920 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2d930 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2d940 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2d950 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2d960 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2d970 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2d980 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d990 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d9a0 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2d9b0 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2d9c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2d9d0 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2d9e0 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2d9f0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2da00 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2da10 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2da20 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2da30 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2da40 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2da50 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2da60 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2da70 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2da80 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2da90 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2daa0 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2dab0 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2dac0 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2dad0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2dae0 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2daf0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2db00 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2db10 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2db20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2db30 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2db40 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2db50 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2db60 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2db70 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2db80 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2db90 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2dba0 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2dbb0 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2dbc0 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2dbd0 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2dbe0 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2dc10 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2dc20 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2dc30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2dc40 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2dc50 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2dc60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2dc70 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2dc80 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2dc90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2dca0 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
2dcb0 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
2dcc0 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
2dcd0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
2dce0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2dcf0 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
2dd00 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2dd10 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
2dd20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2dd30 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2dd40 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29  OINT_RESTART.  )
2dd50 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2dd60 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2dd70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
2dd80 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
2dd90 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
2dda0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
2ddb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2ddc0 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
2ddd0 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
2dde0 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
2ddf0 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
2de00 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
2de10 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2de20 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
2de30 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
2de40 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
2de50 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
2de60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
2de70 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
2de80 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
2de90 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2dea0 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2deb0 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2dec0 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2ded0 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2dee0 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2def0 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2df00 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2df10 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2df20 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2df30 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2df40 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2df50 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2df60 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2df70 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2df80 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2df90 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2dfa0 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2dfb0 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2dfc0 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2dfd0 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2dfe0 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2dff0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2e000 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2e010 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2e020 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2e030 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2e040 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2e050 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2e060 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e080 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2e090 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2e0a0 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2e0b0 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2e0c0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2e0d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2e0e0 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2e0f0 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2e100 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2e110 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2e120 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e140 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2e150 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2e160 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e170 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2e180 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2e190 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2e1a0 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2e1b0 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2e1c0 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2e1d0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2e1e0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2e1f0 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2e200 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2e210 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2e220 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2e230 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2e240 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e250 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2e260 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2e270 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2e280 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2e290 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e2a0 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2e2b0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2e2c0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2e2d0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2e2e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2e2f0 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2e300 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2e310 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2e320 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2e330 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2e340 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2e350 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2e360 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2e370 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2e380 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2e390 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2e3a0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2e3b0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2e3c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2e3d0 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2e3e0 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2e3f0 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2e400 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2e410 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2e420 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2e430 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2e440 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2e450 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2e460 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2e470 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2e480 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2e490 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2e4a0 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2e4b0 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2e4c0 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2e4d0 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2e4e0 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2e4f0 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2e500 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2e510 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2e520 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2e530 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2e540 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2e550 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2e560 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2e570 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2e580 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2e590 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2e5a0 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2e5b0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2e5c0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2e5d0 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2e5e0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2e5f0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2e600 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2e610 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2e620 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2e630 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2e640 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2e650 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2e660 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2e670 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2e680 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2e690 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2e6a0 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2e6b0 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2e6c0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2e6d0 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2e6e0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2e6f0 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2e700 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2e710 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2e720 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2e730 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2e740 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2e750 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2e760 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2e770 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2e780 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2e790 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2e7a0 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2e7b0 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2e7c0 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2e7d0 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2e7e0 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2e7f0 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2e800 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2e810 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2e820 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2e830 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2e840 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2e850 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2e860 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2e870 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2e880 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2e890 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2e8a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2e8b0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2e8c0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2e8d0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2e8e0 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2e8f0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2e900 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2e910 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2e920 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2e930 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2e940 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2e950 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2e960 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2e970 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2e980 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2e990 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2e9a0 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2e9b0 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2e9c0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2e9d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2e9e0 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2e9f0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2ea00 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2ea10 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2ea20 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2ea30 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2ea40 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2ea50 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2ea60 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2ea70 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2ea80 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2ea90 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2eaa0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2eab0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2eac0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ead0 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2eae0 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2eaf0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2eb00 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2eb10 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2eb20 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2eb30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2eb40 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2eb50 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2eb60 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2eb70 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2eb80 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2eb90 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2eba0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2ebb0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2ebc0 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2ebd0 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2ebe0 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2ebf0 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2ec00 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2ec10 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2ec20 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2ec30 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2ec40 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2ec50 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2ec60 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2ec70 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2ec80 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2ec90 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2eca0 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2ecb0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2ecc0 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2ecd0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2ece0 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2ecf0 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2ed00 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2ed10 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2ed20 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2ed30 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2ed40 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2ed50 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2ed60 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2ed70 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2ed80 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2ed90 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2eda0 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2edb0 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2edc0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2edd0 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2ede0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2edf0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2ee00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2ee10 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2ee20 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2ee30 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2ee40 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2ee50 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2ee60 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2ee70 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2ee80 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2ee90 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2eea0 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2eeb0 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2eec0 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2eed0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2eee0 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2eef0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2ef00 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2ef10 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2ef20 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2ef30 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2ef40 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2ef50 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2ef60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ef70 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2ef80 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2ef90 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2efa0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2efb0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2efc0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42  dOnly==0 );.  pB
2efd0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2efe0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
2eff0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
2f000 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
2f010 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2f020 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c  rc==SQLITE_DONE,
2f030 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
2f040 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
2f050 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2f060 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
2f070 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65  TE_OK;.  }.  bre
2f080 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
2f090 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
2f0a0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2f0b0 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
2f0c0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
2f0d0 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
2f0e0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
2f0f0 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
2f100 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
2f110 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
2f120 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
2f130 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
2f140 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
2f150 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
2f160 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
2f170 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
2f180 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
2f190 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
2f1a0 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
2f1b0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
2f1c0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
2f1d0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
2f1e0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
2f1f0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
2f200 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
2f210 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
2f220 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
2f230 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
2f240 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
2f250 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
2f260 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2f270 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
2f280 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2f290 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
2f2a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2f2b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f2c0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2f2d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
2f2e0 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
2f2f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2f300 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
2f310 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
2f320 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2f330 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2f340 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2f350 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2f360 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2f370 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2f380 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2f390 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2f3a0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2f3b0 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2f3c0 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2f3d0 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2f3e0 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2f3f0 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2f400 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2f410 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2f420 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2f430 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2f440 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2f450 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2f460 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2f470 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2f480 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2f490 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2f4a0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2f4b0 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2f4c0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2f4d0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2f4e0 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2f4f0 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2f500 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2f510 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2f520 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2f530 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2f540 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2f550 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2f560 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2f570 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2f580 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2f590 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2f5a0 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2f5b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
2f5c0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2f5d0 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20  eMask, p1) );.  
2f5e0 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
2f5f0 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
2f600 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
2f610 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2f620 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
2f630 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
2f640 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
2f650 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
2f660 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
2f670 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
2f680 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
2f690 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
2f6a0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2f6b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2f6c0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
2f6d0 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
2f6e0 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
2f6f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f700 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2f710 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
2f720 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f730 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f740 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
2f750 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
2f760 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2f770 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
2f780 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2f790 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
2f7a0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
2f7b0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
2f7c0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
2f7d0 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
2f7e0 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
2f7f0 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
2f800 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
2f810 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
2f820 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
2f830 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2f840 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
2f850 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
2f860 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
2f870 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
2f880 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
2f890 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
2f8a0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
2f8b0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
2f8c0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
2f8d0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2f8e0 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
2f8f0 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
2f900 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2f910 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
2f920 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2f930 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f940 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f950 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2f960 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2f970 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2f980 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2f990 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2f9a0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2f9b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2f9c0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2f9d0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2f9e0 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2f9f0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2fa00 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2fa10 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2fa20 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2fa30 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2fa40 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2fa50 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2fa60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2fa70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fa80 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2fa90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2faa0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2fab0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2fac0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2fad0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2fae0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2faf0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2fb00 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2fb10 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2fb20 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2fb30 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2fb40 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2fb50 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2fb60 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2fb70 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2fb80 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2fb90 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2fba0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2fbb0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2fbc0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2fbd0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2fbe0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2fbf0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2fc00 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2fc10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2fc20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2fc30 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2fc40 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2fc50 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2fc60 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2fc70 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2fc80 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2fc90 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2fca0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2fcb0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2fcc0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2fcd0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2fce0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2fcf0 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2fd00 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2fd10 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2fd20 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2fd30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2fd40 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2fd50 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2fd60 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
2fd70 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2fd80 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2fd90 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2fda0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2fdb0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2fdc0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2fdd0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2fde0 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2fdf0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2fe00 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2fe10 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
2fe20 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2fe30 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2fe40 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2fe50 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2fe60 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2fe70 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2fe80 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2fe90 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2fea0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2feb0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2fec0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2fed0 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2fee0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2fef0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2ff00 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2ff10 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2ff20 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2ff30 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2ff40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2ff50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2ff60 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2ff70 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2ff80 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2ff90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2ffa0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2ffb0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ffc0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2ffd0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2ffe0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2fff0 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
30000 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
30010 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
30020 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
30030 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
30040 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
30050 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
30060 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
30070 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
30080 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
30090 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
300a0 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
300b0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
300c0 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
300d0 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
300e0 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
300f0 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
30100 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
30110 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
30120 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
30130 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
30140 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
30150 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
30160 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
30170 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
30180 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
30190 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
301a0 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
301b0 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
301c0 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
301d0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
301e0 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
301f0 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
30200 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
30210 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
30220 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
30230 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
30240 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
30250 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
30260 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
30270 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
30280 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
30290 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
302a0 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
302b0 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
302c0 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
302d0 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
302e0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
302f0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
30300 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
30310 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
30320 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
30330 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
30340 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
30350 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
30360 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
30370 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
30380 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
30390 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
303a0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
303b0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
303c0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
303d0 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
303e0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
303f0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
30400 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
30410 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
30420 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
30430 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
30440 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
30450 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
30460 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
30470 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
30480 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
30490 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
304a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
304b0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
304c0 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
304d0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
304e0 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
304f0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
30500 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
30510 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
30520 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
30530 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
30540 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
30550 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
30560 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
30570 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
30580 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
30590 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
305a0 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
305b0 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
305c0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
305d0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
305e0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20   method */.  {. 
305f0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
30600 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
30610 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
30620 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
30630 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
30640 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20  &pArgc[i+1];.   
30650 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61   }..    p->inVta
30660 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20  bMethod = 1;.   
30670 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
30680 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73  Filter(pVtabCurs
30690 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  or, iQuery, pOp-
306a0 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
306b0 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  rg);.    p->inVt
306c0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
306d0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
306e0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
306f0 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
30700 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
30710 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
30720 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
30730 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
30740 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
30750 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
30760 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
30770 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
30780 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
30790 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
307a0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ..  break;.}.#en
307b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
307c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
307d0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
307e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
307f0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30800 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
30810 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
30820 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
30830 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
30840 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30850 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
30860 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
30870 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
30880 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
30890 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
308a0 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
308b0 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
308c0 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
308d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
308e0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
308f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30900 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
30910 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
30920 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
30930 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
30940 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
30950 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
30960 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
30970 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
30980 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
30990 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
309a0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
309b0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
309c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
309d0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
309e0 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
309f0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
30a00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
30a10 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
30a20 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
30a30 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
30a40 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
30a50 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
30a60 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
30a70 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
30a80 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
30a90 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
30aa0 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
30ab0 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74  ntext));.  sCont
30ac0 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74  ext.pOut = pDest
30ad0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
30ae0 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
30af0 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  ll);.  rc = pMod
30b00 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
30b10 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
30b20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
30b30 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  p2);.  sqlite3Vt
30b40 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30b50 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
30b60 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
30b70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f   ){.    rc = sCo
30b80 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20  ntext.isError;. 
30b90 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
30ba0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
30bb0 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  Dest, encoding);
30bc0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
30bd0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
30be0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
30bf0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
30c00 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
30c10 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
30c20 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
30c30 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
30c40 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30c50 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30c60 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30c70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30c80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30c90 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
30ca0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
30cb0 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
30cc0 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
30cd0 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
30ce0 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
30cf0 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
30d00 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
30d10 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
30d20 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
30d30 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
30d40 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
30d50 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
30d60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
30d70 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
30d80 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
30d90 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
30da0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30db0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
30dc0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
30dd0 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
30de0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
30df0 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
30e00 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
30e10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
30e20 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
30e30 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
30e40 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
30e50 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
30e60 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
30e70 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
30e80 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
30e90 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
30ea0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
30eb0 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
30ec0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
30ed0 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
30ee0 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
30ef0 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
30f00 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
30f10 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
30f20 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
30f30 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
30f40 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
30f50 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
30f60 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
30f70 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
30f80 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
30f90 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
30fa0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
30fb0 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
30fc0 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
30fd0 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
30fe0 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
30ff0 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
31000 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
31010 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
31020 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e  rsor..  */.  p->
31030 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
31040 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
31050 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
31060 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
31070 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
31080 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
31090 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
310a0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
310b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
310c0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
310d0 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
310e0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
310f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31100 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20  (!res,2);.  if( 
31110 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
31120 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
31130 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
31140 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
31150 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  - 1;.  }.  goto 
31160 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
31170 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
31180 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31190 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
311a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
311b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
311c0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
311d0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
311e0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
311f0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
31200 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
31210 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
31220 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
31230 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
31240 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
31250 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
31260 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
31270 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
31280 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
31290 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
312a0 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
312b0 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
312c0 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
312d0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
312e0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
312f0 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
31300 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
31310 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
31320 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
31330 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
31340 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
31350 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
31360 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
31370 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
31380 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
31390 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
313a0 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
313b0 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
313c0 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
313d0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
313e0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
313f0 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
31400 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
31410 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
31420 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
31430 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
31440 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
31450 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
31460 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
31470 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
31480 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
31490 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
314a0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
314b0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
314c0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
314d0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
314e0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
314f0 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
31500 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
31510 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
31520 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31530 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31540 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
31550 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
31560 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  5.** Synopsis: d
31570 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
31580 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
31590 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
315a0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
315b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
315c0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
315d0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
315e0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
315f0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
31600 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
31610 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
31620 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
31630 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
31640 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
31650 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
31660 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
31670 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
31680 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
31690 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
316a0 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
316b0 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
316c0 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
316d0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
316e0 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
316f0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
31700 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
31710 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
31720 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
31730 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
31740 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
31750 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
31760 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
31770 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
31780 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
31790 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
317a0 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
317b0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
317c0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
317d0 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
317e0 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
317f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
31800 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
31810 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
31820 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
31830 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
31840 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
31850 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
31860 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
31870 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
31880 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
31890 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
318a0 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
318b0 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
318c0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
318d0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
318e0 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
318f0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
31900 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
31910 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
31920 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
31930 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
31940 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
31950 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
31960 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
31970 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
31980 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
31990 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
319a0 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65  *.** P5 is the e
319b0 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45  rror actions (OE
319c0 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69  _Replace, OE_Fai
319d0 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74  l, OE_Ignore, et
319e0 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69  c) to.** apply i
319f0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
31a00 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75  constraint failu
31a10 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20  re on an insert 
31a20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  or update..*/.ca
31a30 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
31a40 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
31a50 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
31a60 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
31a70 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
31a80 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
31a90 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
31aa0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
31ab0 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
31ac0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
31ad0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
31ae0 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
31af0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
31b00 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
31b10 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
31b20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
31b30 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
31b40 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
31b50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
31b60 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
31b70 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
31b80 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
31b90 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
31ba0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
31bb0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
31bc0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
31bd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
31be0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
31bf0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
31c00 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
31c10 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
31c20 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
31c30 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
31c40 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
31c50 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
31c60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
31c70 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
31c80 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
31c90 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
31ca0 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
31cb0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
31cc0 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  , pX);.      apA
31cd0 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
31ce0 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
31cf0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
31d00 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
31d10 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
31d20 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
31d30 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
31d40 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
31d50 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
31d60 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
31d70 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
31d80 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
31d90 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
31da0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
31db0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
31dc0 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
31dd0 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
31de0 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
31df0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
31e00 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
31e10 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72   = lastRowid = r
31e20 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
31e30 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
31e40 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
31e50 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
31e60 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
31e70 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
31e80 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
31e90 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
31ea0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
31eb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
31ec0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
31ed0 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
31ee0 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
31ef0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
31f00 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
31f10 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
31f20 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
31f30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31f40 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31f50 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31f60 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
31f70 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
31f80 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
31f90 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
31fa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
31fb0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
31fc0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
31fd0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
31fe0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
31ff0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
32000 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
32010 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
32020 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
32030 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
32040 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
32050 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
32060 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
32070 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
32080 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
32090 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
320a0 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
320b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
320c0 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
320d0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
320e0 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
320f0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
32100 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
32110 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
32120 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
32130 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
32140 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
32150 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
32160 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
32170 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
32180 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
32190 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
321a0 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
321b0 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
321c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
321d0 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
321e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
321f0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
32200 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
32210 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
32220 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74  ree *pBt;..  pBt
32230 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
32240 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61  p1].pBt;.  newMa
32250 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  x = 0;.  if( pOp
32260 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d  ->p3 ){.    newM
32270 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ax = sqlite3Btre
32280 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a  eLastPage(pBt);.
32290 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c      if( newMax <
322a0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
322b0 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75  p3 ) newMax = (u
322c0 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b  nsigned)pOp->p3;
322d0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
322e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
322f0 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c  axPageCount(pBt,
32300 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61   newMax);.  brea
32310 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  k;.}.#endif.../*
32320 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20   Opcode: Init * 
32330 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
32340 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74  opsis:  Start at
32350 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61   P2.**.** Progra
32360 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  ms contain a sin
32370 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  gle instance of 
32380 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74  this opcode as t
32390 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a  he very first.**
323a0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49   opcode..**.** I
323b0 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61  f tracing is ena
323c0 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c  bled (by the sql
323d0 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e  ite3_trace()) in
323e0 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a  terface, then.**
323f0 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
32400 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50  g contained in P
32410 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20  4 is emitted on 
32420 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
32430 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20  ck..** Or if P4 
32440 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68  is blank, use th
32450 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  e string returne
32460 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c  d by sqlite3_sql
32470 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20  ()..**.** If P2 
32480 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d  is not zero, jum
32490 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
324a0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
324b0 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Init: {         
324c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68   /* jump */.  ch
324d0 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68  ar *zTrace;.  ch
324e0 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 4f  ar *z;..  if( pO
324f0 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63 20  p->p2 ){.    pc 
32500 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
32510 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
32520 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 69  E_OMIT_TRACE.  i
32530 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20 20  f( db->xTrace.  
32540 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72   && !p->doingRer
32550 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  un.   && (zTrace
32560 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
32570 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
32580 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
32590 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62    z = sqlite3Vdb
325a0 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54  eExpandSql(p, zT
325b0 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78  race);.    db->x
325c0 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
325d0 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c  Arg, z);.    sql
325e0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
325f0 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51  );.  }.#ifdef SQ
32600 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
32610 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20  RACE.  zTrace = 
32620 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
32630 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
32640 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
32650 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
32660 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
32670 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
32680 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73 74    if( DbMaskTest
32690 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
326a0 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  )==0 ) continue;
326b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
326c0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
326d0 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
326e0 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54  , SQLITE_FCNTL_T
326f0 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20  RACE, zTrace);. 
32700 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
32710 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  /* SQLITE_USE_FC
32720 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66  NTL_TRACE */.#if
32730 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
32740 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67  .  if( (db->flag
32750 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
32760 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a  ace)!=0.   && (z
32770 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
32780 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
32790 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
327a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65  ){.    sqlite3De
327b0 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74  bugPrintf("SQL-t
327c0 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72  race: %s\n", zTr
327d0 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ace);.  }.#endif
327e0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
327f0 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
32800 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
32810 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
32820 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
32830 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
32840 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
32850 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
32860 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
32870 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
32880 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
32890 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
328a0 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
328b0 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
328c0 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
328d0 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
328e0 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
328f0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
32900 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
32910 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
32920 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
32930 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
32940 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
32950 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
32960 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
32970 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
32980 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
32990 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
329a0 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
329b0 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
329c0 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
329d0 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
329e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
329f0 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
32a00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
32a10 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
32a20 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
32a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32a70 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
32a80 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
32a90 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
32aa0 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
32ab0 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
32ac0 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
32ad0 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
32ae0 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
32af0 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
32b00 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
32b10 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
32b20 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
32b30 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
32b40 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
32b50 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
32b60 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
32b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
32bb0 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
32bc0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
32bd0 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e    {.      u64 en
32be0 64 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48  dTime = sqlite3H
32bf0 77 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69  wtime();.      i
32c00 66 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74  f( endTime>start
32c10 20 29 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b   ) pOp->cycles +
32c20 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72  = endTime - star
32c30 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  t;.      pOp->cn
32c40 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  t++;.    }.#endi
32c50 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
32c60 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
32c70 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
32c80 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
32c90 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
32ca0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
32cb0 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
32cc0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
32cd0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
32ce0 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
32cf0 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
32d00 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
32d10 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
32d20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
32d30 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
32d40 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
32d50 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
32d60 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
32d70 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
32d80 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
32d90 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
32da0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
32db0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
32dc0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
32dd0 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
32de0 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
32df0 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e   printf("rc=%d\n
32e00 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
32e10 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
32e20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52  (OPFLG_OUT2_PRER
32e30 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54  ELEASE|OPFLG_OUT
32e40 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
32e50 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d  gisterTrace(pOp-
32e60 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
32e70 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
32e80 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
32e90 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
32ea0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
32eb0 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
32ec0 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
32ed0 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
32ee0 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
32ef0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
32f00 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
32f10 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
32f20 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
32f30 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
32f40 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
32f50 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
32f60 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
32f70 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
32f80 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
32f90 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
32fa0 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
32fb0 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
32fc0 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
32fd0 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
32fe0 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
32ff0 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
33000 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
33010 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
33020 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
33030 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
33040 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
33060 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
33070 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
33080 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
33090 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
330a0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
330b0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
330c0 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
330d0 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
330e0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
330f0 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
33100 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
33110 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
33120 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
33130 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
33140 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
33150 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
33160 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
33170 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
33180 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
33190 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
331a0 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
331b0 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
331c0 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
331d0 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
331e0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
331f0 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
33200 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
33210 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
33220 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
33230 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
33240 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
33250 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
33260 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
33270 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
33280 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
33290 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
332a0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
332b0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
332c0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
332d0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
332e0 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
332f0 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
33300 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
33310 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
33320 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
33330 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
33340 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
33350 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
33360 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
33370 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
33380 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
33390 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
333a0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
333b0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
333c0 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
333d0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
333e0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
333f0 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
33400 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
33410 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
33420 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
33430 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
33440 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
33450 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
33460 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
33470 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
33480 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
33490 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
334a0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
334b0 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
334c0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
334d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
334e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
334f0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
33500 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
33510 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
33520 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
33530 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
33540 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
33550 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
33560 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
33570 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
33580 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
33590 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
335a0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
335b0 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
335c0 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
335d0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
335e0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
335f0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
33600 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
33610 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
33620 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
33630 3b 0a 7d 0a                                      ;.}.